これが私の場合です。どこでもさまざまなアイコンで使用できる共通のアイコンボタンを作成します。
私の手順は次のとおりです。
1)。Button から派生したカスタム IconButton を作成します。これには DefaultImageSource 依存関係プロパティがあります。ここにあります:
public class IconButton : Button
{
public static readonly DependencyProperty DefaultImageSourceProperty =
DependencyProperty.Register("DefaultImageSource", typeof(ImageSource), typeof(IconButton), new FrameworkPropertyMetadata(null));//, new FrameworkPropertyMetadata(OnImageSourceChanged));
public ImageSource DefaultImageSource
{
get { return (ImageSource)GetValue(DefaultImageSourceProperty); }
set { SetValue(DefaultImageSourceProperty, value); }
}
}
2)。このスタイルでこの IconButton を使用すると仮定した場合、プロジェクト リソースで IconButton のスタイルを作成します。
<Style x:Key="IconButtonTemplate" TargetType="{x:Type WpfApplication3:IconButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type WpfApplication3:IconButton}">
<Grid>
<Image Source="{Binding RelativeSource={RelativeSource Self}, Path=DefaultImageSource}" Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>
<Ellipse x:Name="focusEllipse" Fill="Transparent"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="focusEllipse" Property="Fill" Value="#AAFFFFFF"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="focusEllipse" Property="Fill" Value="#AA808080"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="focusEllipse" Property="Fill" Value="#80808080"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
3)。私のWPFウィンドウで複数のIconButtonを作成し、それらを別のアイコンにバインドしますが、うまくいきません。このウィンドウを開いたときにアイコンが表示されない、
<Grid>
<DockPanel>
<WpfApplication3:IconButton Width="30" Height="30" DefaultImageSource="{DynamicResource RefreshIcon}" Style="{DynamicResource IconButtonTemplate}"></WpfApplication3:IconButton>
<WpfApplication3:IconButton Width="30" Height="30" DefaultImageSource="{DynamicResource RunIcon}" Style="{DynamicResource IconButtonTemplate}"></WpfApplication3:IconButton>
</DockPanel>
</Grid>
イメージ リソースのバインドが間違っている可能性がありますが、何度試してもわかりません。なにか提案を?ありがとう。