2

これが私の場合です。どこでもさまざまなアイコンで使用できる共通のアイコンボタンを作成します。

私の手順は次のとおりです。

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>

イメージ リソースのバインドが間違っている可能性がありますが、何度試してもわかりません。なにか提案を?ありがとう。

4

1 に答える 1

2

バインディングで問題を確認できます。使用する

 <Image Source="{Binding RelativeSource={RelativeSource Self}, Path=DefaultImageSource}"  Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>

セルフモードを使用して、ソースイメージコントロールのDefaultImageSourceプロパティにバインドしようとしています。そして、Imageにはそのようなプロパティがないので強打します。

これを試して

 <Image Source="{TemplateBinding DefaultImageSource}"  Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>

これにより、画像のソースButtonのDefaultImageSourceプロパティにバインドしようとします。

これがお役に立てば幸いです。

于 2012-11-15T05:51:14.443 に答える