0

アプリの複数のボタンで作成したボタン スタイルを使用しようとすると、奇妙なことが起こります。再生ボタンと一時停止ボタンの 2 つのボタン テンプレートを作成しました。プレイステートに応じてスタイルを変化させます。再生/一時停止ボタンのあるウィンドウが複数あります。何らかの理由で 1 つを除くすべてのボタンでポリゴンが消えますが、残りのスタイル (色、押された色など) は引き続き機能します。

ボタンのスタイルを次のように設定しています。

btnTelPlay.Style = (Style)FindResource("PlayButtonGreen");
btnTelPlay.Style = (Style)FindResource("GreenPause");

スタイルは次のとおりです。

 <Style x:Key="PlayButtonGreen" TargetType="{x:Type Button}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="Content">
            <Setter.Value>
                <Polygon Stroke="Black" StrokeThickness="1" Points="5,0  5,30, 30,15" Fill="White" />
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Name="Border" CornerRadius="5" BorderThickness="1"
                        Background="#FF3DEE2B"
                        BorderBrush="#404040">
                        <ContentPresenter RecognizesAccessKey="True"
                                              HorizontalAlignment="Center"
                                              VerticalAlignment="Center"
                                              />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsKeyboardFocused" Value="true">
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                        </Trigger>
                        <Trigger Property="IsDefaulted" Value="true">
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#FF3DEE2B" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#FF39C72B" />
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#606060" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#EEEEEE" />
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#AAAAAA" />
                            <Setter Property="Foreground" Value="#888888"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="GreenPause" TargetType="{x:Type Button}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="Content">
            <Setter.Value>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Stretch">
                    <Rectangle Stroke="Black" StrokeThickness="1" Width="10" Height="30" Fill="White" Margin="0,0,2.5,0"></Rectangle>
                    <Rectangle Stroke="Black" StrokeThickness="1" Width="10" Height="30" Fill="White" Margin="2.5,0,0,0"></Rectangle>
                </StackPanel>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Name="Border" CornerRadius="5" BorderThickness="1"
                        Background="#FF3DEE2B"
                        BorderBrush="#404040">
                        <ContentPresenter RecognizesAccessKey="True"
                                              HorizontalAlignment="Center"
                                              VerticalAlignment="Center"
                                              />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsKeyboardFocused" Value="true">
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                        </Trigger>
                        <Trigger Property="IsDefaulted" Value="true">
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#FF3DEE2B" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#FF39C72B" />
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#606060" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Border" 
                          Property="Background" Value="#EEEEEE" />
                            <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#AAAAAA" />
                            <Setter Property="Foreground" Value="#888888"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

2 に答える 2

0

Contentエラーは、プロパティを ではないものに設定していることだと思いますFreezable。これは、WPF がそれを の新しいインスタンスに簡単にコピーできないことを意味しますStyleContentPresenteryourを で設定しているものに置き換えるだけでContent Setter、動作するはずです。

于 2013-08-19T20:31:51.470 に答える