1

私はスタイルのある窓を持っていました

Background="Transparent", AllowsTransparency="True", WindowStyle="None",  ResizeMode="NoResize".

カスタムの最小、最大、閉じるボタンを配置し、機能を実装しました。ウィンドウのサイズをすべての側面で変更したいので。私はそれをHwndSourceうまく動作するように実装しました。今、私の懸念は、ウィンドウにシャドウ効果が必要なことです。そのため、このようにシャドウ効果のある境界線を配置しました。

<Border CornerRadius="5" Margin="10">

    <Border.BitmapEffect>
        <DropShadowBitmapEffect ShadowDepth="10" Opacity=".5" Softness="9" />
    </Border.BitmapEffect>

    <Grid> **Content over here**</Grid>
</Border>

ウィンドウはシャドウ効果を取得します。しかし、ウィンドウを最大化すると。境界線を追加したので、画面に収まりません。ウィンドウが画面に収まるように最大化されたときに、シャドウ効果を削除する必要があります。ウィンドウが最大化されていない状態のときにシャドウ効果が表示されます。これを取得する方法、またはこれを取得する別の方法はありますか..解決策を見つけるのを手伝ってください。

4

2 に答える 2

0

Borderのスタイルを作成することで、コード内でシャドウ効果を動的に追加/削除できると思います。次のような境界線のスタイルを作成できます。

<Style x:Key="borderstyle" TargetType="Border">
                <Setter Property="BitmapEffect">
                    <Setter.Value>
                        <DropShadowBitmapEffect ShadowDepth="10">   </DropShadowBitmapEffect>
                    </Setter.Value>
                </Setter>
            </Style>

そして、それをコードで動的に設定します

borderelement.Style =(Style)Application.Current.MainWindow.Resources ["borderstyle"];

次のコードを使用して削除します

borderelement.Style = null

于 2012-12-28T10:05:08.043 に答える
0

トリガーを使用してウィンドウが最大化されているかどうかを判断し、トリガーセッターで効果を削除できます。ウィンドウのテンプレートをオーバーロードし、ControlTemplateトリガー内にトリガーを追加するだけです

 <Window.Template>
    <ControlTemplate TargetType="Window">
        <Border x:Name="brd">
            <Border.Effect>
                <DropShadowEffect BlurRadius="20" Color="Black"/>
            </Border.Effect>
            <Grid Width="200" Height="200" MouseDown="Grid_MouseDown_1" Background="Red"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="WindowState" Value="Maximized">
                <Setter Property="Effect" TargetName="brd" Value="{x:Null}"></Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

</Window.Template>
于 2012-12-28T11:20:03.987 に答える