4

この 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 の背後にあるフォームに対して透明な背景の上にパスが表示されます。では、「背景の背景」はどこに設定すればよいですか?

4

1 に答える 1

4

問題は、Canvasサイズがないことです。

これに変更すると、次のように表示されます。

<Canvas Background="{x:Static SystemColors.WindowBrush}"
        Width="10"
        Height="10">

これらのディメンションへの参照の数を減らすために、それらをリソースとして宣言できます。正方形を扱っているので、それを 1 つの値に減らすことができます。

    <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}" >

もちろん、ビューモデルにバインドしている場合は、バインドを介してディメンションを駆動することもできます。

于 2012-09-28T18:32:57.593 に答える