嘿,我尝试实施John制作Watermark的课程。
我被困住了,想知道是否有人可以帮助我....添加了提到的2个课程 并在wpf:
<AdornerDecorator>
<ComboBox Height="23" HorizontalAlignment="Right" Margin="0,184,664,0" x:Name="cbVideoDevices" VerticalAlignment="Top" Width="316" Initialized="cbVideoDevices_Initialized" SelectionChanged="cbVideoDevices_SelectionChanged">
<Controls:WatermarkService.Watermark>
<TextBlock>Type here to search text</TextBlock>
</Controls:WatermarkService.Watermark>
</ComboBox>
</AdornerDecorator>
无论我尝试什么,我都会因控件不存在而不断出现错误,或者财产不会退出。我在他的课程中没有错误,所以我认为参考文献很好,但在我看来System.Windows.Control丢失了....但我找不到它添加它...
任何帮助,非常感谢。
编辑:在Liz的帮助下,我让这个工作,但让任何人知道,谁使用它。
答案 0 :(得分:6)
我尝试了这个例子,它对我有用。
但是,我确实注意到以下情况:
这些类没有指定命名空间,所以我为这两个类添加了一个。在我的案例中“水印”。
namespace Watermark
{
public static class WatermarkService
{
...
}
}
“内部”中的WatermarkAdorner类,但除非它在不同的程序集(dll)中,否则不应该打扰你。如果是,那就让它“公开”
然后在xaml中,我添加了名称空间声明
xmlns:Controls="clr-namespace:Watermark"
此时一切正常。
我稍微简化的xaml看起来像这样:
<AdornerDecorator >
<ComboBox Height="23" x:Name="cbVideoDevices"
Initialized="cbVideoDevices_Initialized"
SelectionChanged="cbVideoDevices_SelectionChanged">
<controls:WatermarkService.Watermark>
<TextBlock>Type here to search text</TextBlock>
</controls:WatermarkService.Watermark>
</ComboBox>
</AdornerDecorator>
除了删除边距和对齐外,它与您的基本相同。
这有帮助吗?
作为旁注,我不喜欢在组合框中选择项目时水印仍然显示的事实,因此我更改了WatermarkService中的Control_Loaded方法,如下所示:
private static void Control_Loaded(object sender,RoutedEventArgs e)
{
Control control = (Control)sender;
if(ShouldShowWatermark(control))
{
ShowWatermark(control);
}
else
{
RemoveWatermark(control);
}
}