[英]WPF UserControl: setter not called on binding one property in multiple controls and back
[英]Binding the value of a Setter Property in WPF
我整天都在寻找一种在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,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
我不一定要寻找完整的演练,只需要足够的建议来指导我解决方案。
根据您发布的代码,我假设您使用的是此处的Behavior
现在,如果您在上面的链接中下载示例zip,您将获得5个文件,这些文件为您提供了这组Behavior
(在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}" />
你应该完成。
边注:
System.Windows.Visibility
。 将VM中的Visibility
属性保留为bool
,当您在xaml中Binding
它时使用BooleanToVisibilityConverter
(直接在xaml中可用。您不必创建一个) Style
养成了指定Type="..."
的习惯时。 它不仅有助于一目了然地确定哪种Style
与哪种Style
相关,而且还可以为每个特定的属性保存一些冗余类型限定。 所以像
<Setter Property="FrameworkElement.Opacity"
Value="0.8" />
将会
<Style x:Key="watermarkLabelStyle"
TargetType="{x:Type TextBlock}">
...
<Setter Property="Opacity"
Value="0.8" />
Visible
而它的私有后端是_visibile
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.