3

添付プロパティを介してボタンのコンテンツとして配置した画像を変更しようとしていますが、何らかの理由で画像が変更されておらず、出力に例外や固体が表示されません。これが私の添付プロパティクラスコードです:

public class ImageButton

{ #region イメージ依存プロパティ

    /// <summary>
    /// An attached dependency property which provides an
    /// <see cref="ImageSource" /> for arbitrary WPF elements.
    /// </summary>
    public static DependencyProperty ImageProperty;

    /// <summary>
    /// Gets the <see cref="ImageProperty"/> for a given
    /// <see cref="DependencyObject"/>, which provides an
    /// <see cref="ImageSource" /> for arbitrary WPF elements.
    /// </summary>
    public static ImageSource GetImage(DependencyObject obj)
    {
        return (ImageSource)obj.GetValue(ImageProperty);
    }

    /// <summary>
    /// Sets the attached <see cref="ImageProperty"/> for a given
    /// <see cref="DependencyObject"/>, which provides an
    /// <see cref="ImageSource" /> for arbitrary WPF elements.
    /// </summary>
    public static void SetImage(DependencyObject obj, ImageSource value)
    {
        obj.SetValue(ImageProperty, value);
    }

    #endregion

static ImageButton()
    {
        //register attached dependency property
        var metadataImage = new FrameworkPropertyMetadata((ImageSource)null);
        ImageProperty = DependencyProperty.RegisterAttached("Image",
                                                            typeof(ImageSource),
                                                            typeof(ImageButton), metadataImage);
    }

}

ここでは、添付プロパティを使用したスタイルのコード (画像ソースは値を取るように設定されています):

<Style TargetType="{x:Type Button}" x:Key="MyImageButton">
    <Setter Property="Background" Value="White"/>
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border
                    x:Name="Border"
                    Background="White">
                    <ContentPresenter>
                        <ContentPresenter.Content>
                            <Grid
                                x:Name="Grid"
                                Background="White">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="Auto"/>
                                </Grid.ColumnDefinitions>
                                <Image
                                     Grid.Column="0"
                                    Source="{Binding Path=(attachedProperties:ImageButton.Image),
                                                     RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}}"
                                    Width="30"
                                    Height="25"
                                    Margin="5,0,2,0"
                                    VerticalAlignment="Center"/>
                                <TextBlock
                                    x:Name="TextBlock"
                                    Grid.Column="1"
                                    Text="{Binding Path=(attachedProperties:ImageButton.StringContent),
                                                   RelativeSource={RelativeSource     Mode=FindAncestor,AncestorType={x:Type Button}}}"
                                    VerticalAlignment="Center"
                                    TextAlignment="Center"
                                    Margin="0,0,15,0"/>
                            </Grid>
                        </ContentPresenter.Content>
                    </ContentPresenter>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

そして最後に、スタイルを使用する XAML コードと、画像ソースを変更しようとするトリガーがあります。

<Button
    Grid.Row="2"
    Width="30"
    attachedProperties:ImageButton.Image="..\Images\Down_Arrow_Enabled_Icon_25x25.png"
    Command="{Binding PriorityDownCommand}">
    <Button.Style>
       <Style TargetType="{x:Type Button}"
              BasedOn="{StaticResource MyImageButton}">
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="attachedProperties:ImageButton.Image" Value="..\Images\Down_Arrow_Disabled_Icon_25x25.png"/>
                    </Trigger>
                </Style.Triggers>
       </Style>
    </Button.Style>

問題を見つけることができる人に感謝します!!!

4

1 に答える 1