鉴于此XAML:
<Style TargetType="PasswordBox">
<Setter Property="Background">
<Setter.Value>
<VisualBrush TileMode="Tile"
Viewport="0,0,10,10" ViewportUnits="Absolute">
<VisualBrush.Visual>
<Canvas Background="{x:Static SystemColors.WindowBrush}">
<Path Data="M0,0 L10,10 M0,10 L10,0">
<Path.Stroke>
<SolidColorBrush Color="{x:Static SystemColors.HighlightColor}"/>
</Path.Stroke>
</Path>
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
...
正在忽略画布背景,而是在背景上看到路径,该背景对PasswordBox后面的表单是透明的。那么我应该在哪里设置“背景背景”?
答案 0 :(得分:4)
问题是Canvas
没有大小。
将其更改为此,您应该看到它:
<Canvas Background="{x:Static SystemColors.WindowBrush}"
Width="10"
Height="10">
要减少对这些维度的引用数量,可以将它们声明为资源。 由于您正在处理正方形,因此可以将其减少到一个值:
<Grid.Resources>
<System:Double x:Key="Width">10</System:Double>
<System:Double x:Key="Height">10</System:Double>
<Style TargetType="PasswordBox">
<Setter Property="Background">
<Setter.Value>
<VisualBrush TileMode="Tile"
ViewportUnits="Absolute">
<VisualBrush.Viewport>
<Rect Width="{StaticResource Width}"
Height="{StaticResource Height}" />
</VisualBrush.Viewport>
<VisualBrush.Visual>
<Canvas Background="{x:Static SystemColors.WindowBrush}"
Width="{StaticResource Width}"
Height="{StaticResource Height}" >
当然,如果您绑定到视图模型,您还可以通过绑定来驱动维度。