0

私はリソース辞書の中に次のスタイルを持っています

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="Button">

            <Grid>
                <Rectangle Fill="#262626" Name="Normal"/>
                <Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
                <Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>

                <Image Name="Icon"/>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Grid>

            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
                </Trigger>
            </ControlTemplate.Triggers>

        </ControlTemplate>
    </Setter.Value>
</Setter>

そして、ボタン(MainWindow.xaml内)から「Icon」という名前の画像の「ソース」を変更する必要があります

        <Button Style="{StaticResource ToolbarButton}">
            <Setter TargetName="Icon" Property="Source" Value=".png"/>
        </Button>

しかし、「ソースが認識されないか、アクセスできません」というエラーが表示されます。

ボタンから「アイコン」という名前の画像の「ソース」属性を変更するにはどうすればよいですか?

4

1 に答える 1

2

WPFコントロールは、実際には動作で実行されます。ボタンは画像を表示するためのものではありません。ボタンはContentcontrolであるため、ボタンのコンテンツ内に何でも入れることができます。

<Button>
<image ... />
</Button

上記のスタイルでは、次を使用できます。

        <Grid>
            <Rectangle Fill="#262626" Name="Normal"/>
            <Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
            <Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>

            <Image Name="Icon" Source="{TemplateBinding Tag}" />
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>

        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
                <Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
                <Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
            </Trigger>
        </ControlTemplate.Triggers>

    </ControlTemplate>
</Setter.Value>

これで、ボタンのタグプロパティでソースを指定できます

しかし、これは正しい方法ではありません。コントロールの動作をサポートするプロパティには、TemplateBindingを使用する必要があります。ButtonがImageをサポートしていないのに対し、TemplateBindingtoBackgroundはそれをサポートしています。

他に何か必要な場合はお知らせください。

于 2012-10-12T03:57:16.100 に答える