2012-04-12 8 views
2

私は自分のアプリケーションにリソース辞書を作成しています。そこにいくつかの「アイコン+テキスト」ボタンがあります。彼らはすべてが(アイコンとテキストを除く)と同じになりますので、私は他の人への拠点として、一般的なスタイルを作成しました:基本スタイルとカスタムカスタムコントロールを使用する

<!-- Generic ActionButtonStyle --> 
<Style x:Key="ActionButtonStyle" TargetType="{x:Type Button}"> 
    <!-- some setter properties --> 
    <Setter Property="ContentTemplate" Value="{DynamicResource ButtonDataTemplate}"/> 
</Style> 
<DataTemplate x:Key="ButtonDataTemplate"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="24" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Image Source="{Binding Source}" 
       Stretch="Uniform" 
       Grid.Column="0" 
       Margin="2"/> 
     <TextBlock Text="{Binding text}" 
        TextWrapping="Wrap" 
        Grid.Column="1" 
        Margin="2" 
        VerticalAlignment="Center"/> 
    </Grid> 
</DataTemplate> 

そして私はアイコンのためのいくつかの画像を持っている:

<!-- Icons --> 
    <ImageSource x:Key="textToSpeech">Images/GreyIcons/TextToSpeech.png</ImageSource> 
    <ImageSource x:Key="play">Images/GreyIcons/Play.png</ImageSource> 
    <ImageSource x:Key="playSound">Images/GreyIcons/PaySound.png</ImageSource> 
    . 
    . 
    . 
    . 
    <ImageSource x:Key="group">Images/GreyIcons/Goup1.png</ImageSource> 

そして、各ボタン(各アイコンに対応)ごとに個別のスタイルを作成したいと思います。このようなもの:

<!-- Specific ActionButtonStyles --> 
<Style x:Key="TextToSpeechButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ActionButtonStyle}"> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <Image Source="{StaticResource textToSpeech}" 
     </Setter.Value> 
    </Setter> 
</Style> 

私はこれがうまくいかないことを知っています。どうすればいいですか?ジェネリックボタンのカスタムユーザーコントロールを作成する必要がありますか?テキストはモデル内のオブジェクトにバインドされ、コマンドもアクションに割り当てられます。

答えて

1

あなたが探しているものの例は見当たりませんが、継承することはできますが以前定義したスタイルを上書きできる「BasedOn」を探しているようです。あなたはこのようにそれを実装することができます

<Style x:Key="MyButtonStyle" BasedOn="{StaticResource ActionButtonStyle}"> 
    <Setter.../> 
</Style> 
+0

私はそれを知っていますが、どのセッターを使うべきですか? (いくつかのコードが不足していた、私はちょうど私の質問を更新しました) – Joana

1

次の2つの新しいDependancyPropertiesを追加ボタンから派生クラスを作成する必要があります。彼らはTextやImageSourceのように呼ばれます。派生クラスは、指定したとおりにContentTemplateも設定します。このContentTemplateは、TextおよびImageSource依存プロパティに対してバインドします。

あなたが、その後...このようにXAMLで

<app:CustomButton Text="Play" Source="{Binding play}"/> 

をカスタムコントロールを作成することができます...しかし、あなたは何度も何度も同じボタンをしたい場合は、CustomButtonに適用されるスタイルを作成することができます必要に応じてこれら2つのプロパティを設定します。

関連する問題