c# – 在WPF中绑定Setter属性的值

c# – 在WPF中绑定Setter属性的值,第1张

概述我整天都在寻找一种在ComboBox上显示默认文本字符串的方法,而我设法找到的最接近的工作是使用水印的示例.当我的应用程序打开时,ComboBox的Visibility属性设置为Collapsed,然后通过命令显示.不幸的是,我无法让水印效仿.这是我正在使用的: <Style x:Key="watermarkLabelStyle"> <Setter Property="TextBlock. 我整天都在寻找一种在ComboBox上显示默认文本字符串的方法,而我设法找到的最接近的工作是使用水印的示例.当我的应用程序打开时,ComboBox的Visibility属性设置为Collapsed,然后通过命令显示.不幸的是,我无法让水印效仿.这是我正在使用的:
<Style x:Key="watermarkLabelStyle">    <Setter Property="TextBlock.Foreground" Value="Black" />    <Setter Property="FrameworkElement.Opacity" Value="0.8" />    <Setter Property="TextBlock.FontSize" Value="12" />    <Setter Property="TextBlock.FontStyle" Value="Italic" />    <Setter Property="TextBlock.margin" Value="8,4,4" />    <Setter Property="TextBlock.Visibility" Value="{Binding Visible}" /></Style>

{Binding Visible}即使窗口中的其他控件绑定到它并且行为正常也没有任何效果.

<ComboBox ItemsSource="{Binding LeagueFormatsNode}"          x:name="leagueFormatComboBox"          GrID.Column="0"          GrID.Row="1"          GrID.ColumnSpan="3"          ScrollVIEwer.CanContentScroll="False"          HorizontalContentAlignment="Stretch"          Visibility="{Binding Visible}"          Behaviors:WatermarkComboBoxBehavior.EnableWatermark="True"          Behaviors:WatermarkComboBoxBehavior.Label="Select League Format"          Behaviors:WatermarkComboBoxBehavior.LabelStyle="{StaticResource watermarkLabelStyle}" />

和viewmodel中的Visible属性:

public Visibility Visible{    get { return _visibile; }    set    {        if (_visibile == value)            return;        _visibile = value;        RaisePropertyChanged(() => Visible);    }}

如何使样式中的setter表现并注册绑定?

如果您需要其他代码,我很乐意提供.

更新:Snoop在TextBlock的Visibility属性上显示绑定错误.在DataContext选项卡上,它显示“object is null”.我一直在寻找解决这个问题的方法,但我还没弄清楚如何解决这个问题.如果有人能够把我推向正确的方向,我当然会很感激.代码来自http://archive.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PierreCode&ReleaseId=3546

我不一定要寻找完整的演练,只需要足够的建议来指导我解决方案.

解决方法 根据您发布的代码,我假设您使用 Here的行为

现在,如果您在上面的链接中下载示例zip,您将获得5个文件,这些文件为您提供了这组行为(在Behavior文件夹中找到).

编辑TextBlockAdorner.cs

在刚刚行之后的构造函数中

m_TextBlock = new TextBlock { Style = labelStyle,Text = label };

m_TextBlock.DataContext = adornedElement;

现在在你的Style setter中切换你的Binding

<Setter Property="TextBlock.Visibility"        Value="{Binding DataContext.Visible}" />

你应该完成.

边注:

>不要在VM中保存System.windows.Visibility.将VM中的Visibility属性保留为bool,当您在xaml中绑定它时使用BooleanToVisibilityConverter(直接在xaml中可用.您不必创建一个)
>当您定义Style时养成指定Type =“…”的习惯.它不仅有助于一目了然地确定哪种风格与哪种风格相关,而且还为每个设置者属性保存了一些冗余类型限定.

所以像

<Setter Property="FrameworkElement.Opacity"        Value="0.8" />

将会

<Style x:Key="watermarkLabelStyle"        targettype="{x:Type TextBlock}">  ...  <Setter Property="Opacity"          Value="0.8" />

>最后希望这只是代码中的一个错误,但如果不是尝试遵循您的属性的一些命名约定.在您的VM中,您的属性称为Visible,而它的私有后端是_visibile.

总结

以上是内存溢出为你收集整理的c# – 在WPF中绑定Setter属性的值全部内容,希望文章能够帮你解决c# – 在WPF中绑定Setter属性的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存