2010-11-23 13 views
1

私は2つの状態要素を実装しています。私は2つのxamlを持っています(第1の状態と第2の状態)。私はマウスクリックで状態を変えるべきです。WPF。 TwoState要素

私は自分のコントロールの子を作成し、私は

public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var btn = GetTemplateChild("LayoutRoot") as ContentControl; 
     if (btn != null) 
     { 
      btn.MouseLeftButtonDown += (o, e) => 
      { 
       //sample change template 
       var template = (ControlTemplate)btn.FindResource("buttonDownTemplate"); 
       this.Template = template; 
      }; 

     } 

    } 

を変更するテンプレートを扱うしかし、私は私のコントロールを持つアプリケーションを実行するときに私が得るOnApplyTemplateでXAML

<Style TargetType="l:ActionButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="l:ActionButton"> 
       <ContentControl x:Name="LayoutRoot"> 
        <ContentControl.Resources> 
         <ControlTemplate x:Key="buttonDownTemplate"> 
          <Canvas>.....</Canvas> 
         </ControlTemplate> 
         <ControlTemplate x:Key="buttonUpTemplate"> 
          <Canvas>.....<Canvas>    
         </ControlTemplate> 
        </ContentControl.Resources> 
       </ContentControl> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

を使用します「の項目を同じキーですでに追加されています。例外?

何が問題なのですか。私の道は正しいのですか?

ありがとう、アンドリュー

答えて

4

これは間違いなく行く方法です。 2つの別々の状態を持つコントロールが必要な場合は、ToggleButtonのスタイルを変更するだけです。これは本当に遅いので、あなたは完全にControlTemplateを交換する必要はありません。代わりに、両方のビジュアルを同じテンプレートに入れ、状態に基づいてビジュアルを表示/非表示にします。

これ

はそのようになります。トグルボタンのスタイルは、あなたが後にしているものを実現するものである(そしてそれは背後には、コードを必要としません):

<Style x:Key="twoStateButton" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Grid> 
        <Canvas x:Name="buttonDownTemplate" Background="#202020" Visibility="Collapsed"> 
         ... 
        </Canvas> 
        <Canvas x:Name="buttonUpTemplate" Background="#C0C0C0"> 
         ... 
        </Canvas> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="True"> 
         <Setter TargetName="buttonDownTemplate" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="buttonUpTemplate" Property="Visibility" Value="Collapsed" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
関連する問題