26

次のように定義されたWPFボタンがあります。

<Button Style="{StaticResource RevertButtonStyle}" />

スタイルは次のようになります。

<Style x:Key="RevertButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Height" Value="25" />
    <Setter Property="Width" Value="20" />
    <Setter Property="Margin" Value="3,0,0,0" />
</Style>

「revert.png」という画像を使用するようにコンテンツを指定するようにスタイルを変更するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

44

Contentプロパティをコントロールのインスタンスに設定することはできません。その場合Image、Imageは複数のボタンで使用される可能性があります。これにより、「ビジュアルはすでに別のビジュアルの子である」という例外が発生します。

代わりに、次のようにDataTemplateを使用できます。

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <Image Source="revert.png" />
        </DataTemplate>
    </Setter.Value>
</Setter>

明らかに、画像のソースURIを調整する必要があるかもしれません。

于 2011-08-30T23:09:47.237 に答える
4

私のアプリケーションでは、プロパティImageButtonを指定するコントロールを定義しました。ImageSource

これは次のようなスタイルです。

<Style TargetType="{x:Type controls:ImageButton}">
    <Setter Property="ForceCursor" Value="True" />
    <Setter Property="Cursor" Value="Hand" />

    <Setter Property="ToolTip" Value="{Binding Path=Caption, RelativeSource={RelativeSource Mode=Self}}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type controls:ImageButton}">
                <Image Width="16" Height="16" Source="{Binding Path=ImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" Name="image" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="image" Property="Opacity" Value="0.3" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

ただし、特定のセットを持つすべてのButtonオブジェクトに同じ画像を使用する場合は、使用する画像がアプリケーションのリソースとして含まれている場合に使用するStyleだけで済みます。<Image Source="pack://application:,,,/My.Assembly.Name;component/Icons/revert.png" />Template

于 2011-08-30T23:03:30.560 に答える