0

WPFでボタンのスタイルを作成したいのですが、ボタンの性質は、背景画像を表示し、マウスオーバーすると別の背景画像を表示するようなものです。このために以下のxaml構造を作成しました

 <Style x:Key="ShelfRefreshButton" TargetType="Button">
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="Width" Value="22"/>
            <Setter Property="Height" Value="21"/>    
            <Setter Property="Background">
                <Setter.Value>
                    <ImageBrush ImageSource="images\refresh_active.png" />
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Name="border" 
                            BorderThickness="0" 
                            Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" TargetName="border">
                                    <Setter.Value>
                                        <ImageBrush ImageSource="images\refresh_mouseover.png" />
                                    </Setter.Value>
                                </Setter>

                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

私が直面している問題は、 Style の Width と Height です。どうすれば自動にできますか?ボタンは画像サイズに応じてサイズ変更する必要があります。したがって、幅と高さのハードコードされた値を設定する必要はありません。上記の xaml スタイルで、幅と高さのプロパティ ボタンを削除すると、まったく表示されなくなります。この問題を解決するにはどうすればよいですか?スタイルに適用する必要がある変更は何ですか?

4

1 に答える 1

1

ImageBrush の使用は少しトリッキーです。新しい Image 要素を作成し、それを制御することをお勧めします。Image と ContentPresenter を Grid に配置します。次に、Image に名前を付けると、それを制御できます。その後、Image を NoResize に設定し、Button Width&Height を Image の ActualWidth & ActualHeight にバインドしてください。

于 2013-07-31T05:42:04.400 に答える