0

さまざまな色の画像/テキスト ボタンを作成する必要がある C# WPF アプリケーションがあります。そのために、Button クラスから派生した ImageButton を作成しました。

ボタンの角を丸くしたいので、次のコントロール テンプレートを作成しました。

    <ControlTemplate x:Key="RoundedButtonTemplate" TargetType="{x:Type MyProject:ImageButton}">
        <Grid>
            <Border x:Name="border" Background="WHAT DO I PUT HERE?" CornerRadius="10"/>
        </Grid>         
    </ControlTemplate>

XAML でスタイルを変更するだけで、上の境界線の色を簡単に変更できるようにしたいと考えています。以下のスタイルを定義しています。

緑のボタンのスタイル:

    <Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}">
        <Setter Property="Background" Value="{DynamicResource GreenButtonBrush}"/>
RoundedButtonTemplate}"/>
    </Style>

青いボタンのスタイル:

    <Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}">
        <Setter Property="Background" Value="{DynamicResource BlueButtonBrush}"/>
RoundedButtonTemplate}"/>
    </Style>

私のクライアントコードは次のようになります。

<local:ImageButton HorizontalAlignment="Left" Margin="24,19.234,0,20" Width="97" Grid.Row="3" Style="{DynamicResource GreenButtonStyle}" Template="{DynamicResource RoundedButtonTemplate}"/>

私の質問は、どのスタイルを使用するかをテンプレートに知らせるにはどうすればよいですか? 次のプロパティを自分のスタイルに追加しようとしましたが、あまり成功しませんでした:

<Setter Property="Template" Value="{DynamicResource RoundedButtonTemplate}"/>
4

2 に答える 2

0

私はそれを理解したと思います。必要なのは、テンプレート定義に次のテキストを配置することだけでした。

Background="{TemplateBinding Background}"

詳細については、次の記事を参照してください: TemplateBinding: スタイルとテンプレートの間のブリッジ

于 2012-06-22T15:42:38.317 に答える
0

これは複合コントロールであるため、ImageButton は UserControl を継承していると思います。そうでない場合は、おそらくそうすべきです。MSDN では、Control と UserControl からの継承について説明しています。そこに Border を配置し、Button と TextBlock などの内部に配置します。

これを行う 1 つの方法は、「BorderBackground」など、新しい ImageButton クラスで依存関係プロパティを定義することです。これをリンクして、設定時に境界線の背景色を変更します。必要に応じてサンプル コードを提供できます。

スタイルを設定すると、ターゲット プロパティは「BorderBackground」になります。これにより、通常は回避しようとしている ControlTemplate の変更が不要になります。

これはまったく役に立ちますか?

または、元の質問に答えてください。スタイルは、Border コントロールの Background ではなく、ImageButton コントロールの Background をターゲットにしているため、テンプレートがスタイルを適用する方法を知っているかどうかはわかりません。

于 2012-06-22T15:38:40.497 に答える