いくつかのボタンを備えたUserControlがあります。ボタンの背景色を変更する必要がありますが、マウスオーバーイベントなどの他のすべてのプロパティと色は保持します
UniqueButton1
に基づいて定義したい次のコードを使用しまし{StaticResource {x:Type Button}}"
たが、backgroundプロパティを変更して独自の色を定義しました
<UserControl x:Class="Project.Detail"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="800" BorderBrush="#FF5380E7" BorderThickness="0,0,0,1" xmlns:my="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
<UserControl.Resources>
<Style x:Key="UniqueButton1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" >
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1">
<GradientStop Color="#FFF896CE" Offset="0" />
<GradientStop Color="#FFF788C7" Offset="0.5" />
<GradientStop Color="#FFF570BB" Offset="0.5" />
<GradientStop Color="#FFF353AE" Offset="1" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid Height="30" Width="800">
<Button Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" Name="button2" VerticalAlignment="Top" Width="50" Click="b_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" />
<Button Style="{StaticResource UniqueButton1}" Height="30" HorizontalAlignment="Left" Margin="423,0,0,0" Name="button1" VerticalAlignment="Top" Width="50" Click="b_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" />
</Grid>
</UserControl>
背景色を必要な方法で取得できるという点で、これは一種の機能ですが、UniqueButton1
定義した<UserControl.Resources>
のは、スタイルの変更が適用されていない他のデフォルトのbutton2に基づいていません。たとえば、背景、色、アニメーションの速度などはすべて異なります
テーマもつけているからかな?
button2
私の質問は次のいずれかです。1。テーマが適用されたデフォルトに基づくリソースを定義するにはどうすればよいですか?または2.テーマを適用してbutton2のすべてのプロパティを取得して、独自のスタイルを作成するにはどうすればよいですか。
自分のスタイルを構築する必要があるかもしれないと提案されましたが、それは問題ありません。ただし、backgroundプロパティを除いて、デフォルトのテーマボタンの動作と一致させる必要があります。どのように構成されているかがわからない場合は、ちょっとした落とし穴のようです22。
編集:物事を明確にするために
これらの2つの画像は、3つのボタンを示しています。ボタン3のムースオーバーは、ボタン2のオレンジとブルーであることがわかります。見えないのは、アニメーションの速度も違うということです。基本的に、button3のアニメーション速度やその他のプロパティを維持しながら、ボタンを静止状態のbutton1とマウスオーバーのbutton3のように見せたいと思います。Button2は、プロパティを変更せずにベースを使用して取得しているものです。
Button3は、リソースとXAMLなしで作成されます
<Button Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed"/>
Button2はを使用して生成されます
<UserControl.Resources>
<Style x:Key="TEST1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" >
</Style>
</UserControl.Resources>
<Button Style="{StaticResource TEST1}" Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed"/>
Button1はを使用して生成されます
<UserControl.Resources>
<Style x:Key="UniqueButton1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" >
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1">
<GradientStop Color="#FFF896CE" Offset="0" />
<GradientStop Color="#FFF788C7" Offset="0.5" />
<GradientStop Color="#FFF570BB" Offset="0.5" />
<GradientStop Color="#FFF353AE" Offset="1" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Button Style="{StaticResource UniqueButton1}" Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" />
したがって、ボタン1と2は、私が欲しいボタン3に基づいていないことは明らかです。button3プロパティのクローンを作成し、背景をピンクに変更するだけです。