我已经花了一整天的时间寻找一种在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}" />
在视图模型中,Visible
属性表示:
public Visibility Visible
{
get { return _visibile; }
set
{
if (_visibile == value)
return;
_visibile = value;
RaisePropertyChanged(() => Visible);
}
}
我该怎样让样式中的setter工作并注册绑定呢?
如果需要额外的代码,我很乐意提供。
更新:Snoop在TextBlock的Visibility属性上显示绑定错误。在DataContext选项卡上,它说“对象为空”。我一直在寻找修复这个问题的方法,但我还没有能够找到解决方法。如果有人能够指导我走向正确的方向,我会非常感激。代码来自这里http://archive.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PierreCode&ReleaseId=3546
我不一定要求完整的步骤,只需要足够的建议来引导我解决问题。
DataContext
。我怀疑您在 Visual Studio 输出窗口中还可能有绑定错误信息。 - Federico Berasategui显示名称为'Snoop.XmlSerializers'的程序集在具有ID 1的AppDomain的'LoadFrom'绑定上下文中加载失败。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集'Snoop.XmlSerializers,Version = 2.8.0.0,Culture = neutral,PublicKeyToken = null'或其某个依赖项。系统找不到指定的文件。
Snoop在其他应用程序上运行良好。 - Jason DTextBlock
的 Visibility 属性上显示绑定错误。在 DataContext 选项卡中,它显示“对象为空”。 - Jason DTextBlock
可能是由行为创建的。您需要更改行为中的代码,以便TextBlock
接收与其关联对象相同的数据上下文。 - Federico Berasategui