绑定WPF中的Setter属性的值

时间:2013-06-19 20:33:33

标签: c# wpf xaml

我花了一整天时间寻找一种方法来显示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

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

1 个答案:

答案 0 :(得分:8)

根据您发布的代码,我假设您使用Here中的Behavior

现在,如果您在上面的链接中下载示例zip,那么您有5个文件可以为您提供Behavior的{​​{1}}文件夹。(

修改Behavior

在行

之后的构造函数中
TextBlockAdorner.cs

添加

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

现在,在m_TextBlock.DataContext = adornedElement; 设置器中,将Style转换为

Binding

你应该完成。

<强>侧面说明:

  • 不要在VM中保留<Setter Property="TextBlock.Visibility" Value="{Binding DataContext.Visible}" /> 。将System.Windows.Visibility属性作为Visibility保留在VM中,当xaml中的bool使用Binding时(可直接在xaml中使用。您不必创建一个)< / LI>
  • 当您的定义BooleanToVisibilityConverter养成指定Style的习惯时。它不仅有助于一目了然地确定哪些Type="..."与哪些内容相关,而且还为每个setter属性保存了一些冗余类型资格。

类似

Style

将是

<Setter Property="FrameworkElement.Opacity"
        Value="0.8" />
  • 最后希望这只是代码中的拼写错误,但如果没有尝试遵循您的属性的一些命名约定。在您的虚拟机中,您的媒体资源称为<Style x:Key="watermarkLabelStyle" TargetType="{x:Type TextBlock}"> ... <Setter Property="Opacity" Value="0.8" /> ,而私有后端为Visible
相关问题