c# – 在WPF中绑定Setter属性的值
我整天都在寻找一种在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中可用.您不必创建一个) 所以像 <Setter Property="FrameworkElement.Opacity" Value="0.8" /> 将会 <Style x:Key="watermarkLabelStyle" TargetType="{x:Type TextBlock}"> ... <Setter Property="Opacity" Value="0.8" /> >最后希望这只是代码中的一个错误,但如果不是尝试遵循您的属性的一些命名约定.在您的VM中,您的属性称为Visible,而它的私有后端是_visibile. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |