2

Wpf ドロップシャドウが消えます。再現方法はこちら。

xaml パッドに次のように入力します。

<Page.Resources>
    <DropShadowEffect x:Key="shadow"
        Opacity="1"
        ShadowDepth="1"
        Color="Blue"
        BlurRadius="30"/>
</Page.Resources>
<Grid>
    <Button  HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border x:Name="Bd"
                                    BorderBrush="Black" BorderThickness="1"
                                    Background="Yellow"
                                    CornerRadius="8"
                                    Effect="{StaticResource shadow}">
                                <TextBlock Text="Hello out there"  HorizontalAlignment="Center" VerticalAlignment="Center"  />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
    </Button>
</Grid>

境界線のあるテキストが表示され、境界線の周りにドロップ シャドウが表示されます。

Margin="0,0,0,0"Margin="0,300,0,0"に変更し、 xamlパッド ウィンドウのサイズを変更して境界線が見えるようにします。私のマシンでは、ドロップ シャドウがなくなりました。

他の誰かがこれを見ますか?助けてください。

4

1 に答える 1

2

良い説明があればいいのですが、私が遊んだ XAML に奇妙なことがいくつかありました。解決策があると思います。

  1. グリッドを使用する場合、ほとんどの場合、特定の数の行と列をレイアウトする必要があります。それらを指定する必要があります。ただし、これは問題には影響しません。
  2. 同様に、最終的にはこの情報を XAML に配置する必要があるため、要素の行と列を指定する必要があります。IMO から始めるのは良い習慣です。
  3. 説明できない問題は、Horizo​​ntalAlignment と VerticalAlignment の組み合わせにあります。ボタンをグリッドに配置すると、ボタンがスペース全体を占有すると予想されますが、そうではありません。私が理解できる限り、これを機能させる唯一の方法は、HeightWidthを指定することでした。これを行うと、エフェクトが機能します。元の XML のしきい値は合計 Y マージン 239 であることがわかりました。たとえば、0,239,0,0 を使用すると失敗します。0,139,0,100 を使用した場合、合計が 239 であるため、これも失敗します。奇妙なことです。

動作する私のXAMLは次のとおりです。

<Page.Resources>
    <DropShadowEffect x:Key="shadow"
        Opacity="1"
        ShadowDepth="2"
        Color="Blue"
        BlurRadius="30"/>
</Page.Resources>
<Grid Width="Auto" Height="Auto">
  <Grid.RowDefinitions>
    <RowDefinition></RowDefinition>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition></ColumnDefinition>
  </Grid.ColumnDefinitions>
    <Button Width="90" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,300,0,0" Grid.Row="0" Grid.Column="0">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border x:Name="Bd"
                                    BorderBrush="Black" BorderThickness="1"
                                    Background="Yellow"
                                    CornerRadius="8"
                                    Effect="{StaticResource shadow}">
                                <TextBlock Text="Hello out there"  HorizontalAlignment="Center" VerticalAlignment="Center"  />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
    </Button>

EDIT OP は、ボタンのコンテンツが動的に変更される可能性があるため、ボタンのサイズを指定したくありません。MinHeight を 18 などに設定すると (ほとんどのコンテンツではこれが妥当だと思います)、ドロップシャドウ効果が再び機能することがわかりました。

<Border x:Name="Bd" BorderBrush="Black" BorderThickness="1" Background="Yellow" CornerRadius="8" Effect="{StaticResource shadow}" MinHeight="18">
  <StackPanel Orientation="Vertical">
    <TextBlock>hi</TextBlock>
    <TextBlock>there</TextBlock>
  </StackPanel>
</Border>
于 2010-02-23T04:49:31.920 に答える