1

わかりました..これは非常に奇妙です....ボタンを定義しました。実際には5つのボタンがあり、それぞれに異なる色がありますが、マウスオーバーすると、色が氷のような青色に変わります....それをオーバーライドしようとしました以下のコードを使用して:

        <Button Name="btn1" Content="Button" Width="65" Height="45" Background="Green" Margin="1,1,0,1" FontWeight="Bold">
            <Button.Style>
                <Style>
                    <Style.Triggers>
                        <Trigger Property="Button.IsMouseOver" Value="True">
                            <Setter Property="Button.Background" Value="Yellow" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
            <Button.LayoutTransform>
                <RotateTransform Angle="270"/>
            </Button.LayoutTransform>
        </Button>

しかし、それでも機能しません...私が望むのは、指定された背景色を維持する必要があることです(ボタンごとに異なります)ので、問題は:ボタンごとに何度も定義する必要がありますか(トリガーが機能しませんでした、色がアイスブルーになります)または、リソースファイルで、色の変更を停止するか、背景を既存のプロパティに設定するだけの一般的な値で定義できますか編集:明確にするために、ボタンを停止したいマウスオーバーで色を変更し、割り当てた色を保持します.....

4

1 に答える 1

1

コメントと私がリンクした SO 投稿に基づいて: その記事は typeButtonのすべてにスタイルを適用したため、すべてのボタンに適用されます (これは必ずしも悪いことではありません)。しかし、その記事から取り上げるべき顕著な点は、変更する必要があるのはControlTemplate.

したがって、次のようなことをしたいと思うでしょう:

    <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="Chrome" BorderBrush="Black" BorderThickness="2" CornerRadius="2" Background="{TemplateBinding Property=Background}">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

インタラクティブ性がすべて失われるため、これは完璧ではありません (つまり、プッシュしたか、ホバーしたかなどを判断できません)。しかし、それはあなたに良い出発点を与えてくれます。

ここで重要なポイントの 1 つは、 のBackgroundプロパティが にBorderバインドされてTemplateParent Property=Backgroundいることです。つまり、ボタンの background プロパティを読み取って、テンプレート化し、その背景色を使用します。これにより、単一のスタイルを使用して 5 つのボタンすべてを簡単にカバーできます。このプロパティで同様のことを行うことができます (また、そうしたい場合もあります) BorderBrush

また、私のスタイルにはx:Key値があることに注意してください。これを使用するには、次のようにします。

    <Button x:Name="btn1" Content="Button" Width="65" Height="45" Background="Green" Margin="1,1,0,1" FontWeight="Bold" Style="{DynamicResource ButtonStyle1}">
        <Button.LayoutTransform>
            <RotateTransform Angle="270"/>
        </Button.LayoutTransform>
    </Button>

属性を削除するx:Keyと、リソースを宣言したコンテナー内のすべてのボタンにスタイルが実際に適用されます。

于 2012-08-20T19:49:42.683 に答える