2017-03-20 7 views
0

私がボタンを持っている:そして、私はButtonStyle1WPFボタン - 指定のテンプレートとスタイルを一緒

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Viewbox> 
         <Grid> 
          <Ellipse Stroke="#f2f2f0" StrokeThickness="3" Fill="red" Width="77" Height="77"/> 
         </Grid> 
        </Viewbox> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
を持って

<ControlTemplate x:Key="aButtonTemplate" TargetType="{x:Type Button}"> 
     <Border Name="border" Background="Transparent" BorderBrush="Transparent" BorderThickness="2"> 
      <ContentPresenter x:Name="content" /> 
     </Border> 

     <ControlTemplate.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter TargetName="border" Property="BorderBrush" Value="Red"/> 
      </Trigger>    
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

<Button x:Name="someButton" 
    Template="{StaticResource aButtonTemplate}"       
    Command="{Binding MyCommand}" 
    Style="{StaticResource ButtonStyle1}" > 

さて、aButtonTemplateは次のようになります

問題は、Template="{StaticResource aButtonTemplate}"という行のために、スタイルButtonStyle1が適用されていないことです。私は楕円形を見ていない。

にはどうすればテンプレートと一緒に仕事をするスタイルを得ることができますか?

編集:私はStyleTemplate1でControlTemplateを再度指定していますが、BasedOnを使用して両方のスタイルをButtonStyle2に結合する方法はありますか?どうしたらいいですか?

+0

私はそれは私が前に年間それをやって覚えてみましょう、あなたのスタイルテンプレートにControlTemplateの作業のすべてを移動したいと思う少なくとも。 – kenny

+0

私は他の場所でもスタイルを使用しています...だからこの場合、私はそれらの2つを組み合わせたくありません – Sabz

+2

コントロールは1つのテンプレートのみを持つことができます。 1つのテンプレートを選択して使用します。スタイルで設定するか、ボタンで設定します。関係ない。 1つのテンプレートを選んで、あなたがしたいことを何でもしてください。 –

答えて

1
<Style x:Key="StyleButton2" 
     TargetType="Button" 
     BasedOn="{StaticResource StyleButton1}"> 
<Setter Property="Template" 
     Value="{StaticResource aButtonTemplate}"/> 
</Style> 

次に、このスタイルだけをButtonインスタンスで使用します。

明らかに、このスタイル(StaticResourceの使用を引き起こす)の前にStyleButton1とaButtonTemplateの両方を定義してください。

+0

あなたのお返事ありがとうございます。ただし、これは機能しません。楕円のスタイルは適用されていません... – Sabz

+0

あなたはそれを使った方法を投稿できますか? – Mishka

+0

<スタイルX:キーは= "CombinedButtonStyle" TargetTypeに= "ボタン" BASEDON = "{StaticResource ButtonStyle1}"> Sabz

1

スタイルをテンプレートと一緒に使用するにはどうすればよいですか?

ザ・は両方適用されているが、あなたは{StaticResource aButtonTemplate}に設定TemplateプロパティがTemplate財産Styleセットの値を上書きします。ローカル値は、スタイルセッターによって設定された値よりも優先されます(https://msdn.microsoft.com/en-us/library/ms743230(v=vs.110).aspx)。

編集:私はStyleTemplate1でControlTemplateを再度指定していますが、BasedOnを使用して両方のスタイルをButtonStyle2に結合する方法はありますか?どうしたらいいですか?

あなたは別のStyleStyleを基づかことはできますことはできませんベース別ControlTemplateControlTemplateControlTemplateは全体として定義する必要があります。

WPF: Is there a way to override part of a ControlTemplate without redefining the whole style?

関連する問題