2016-07-11 3 views
2

私は2 ContentPresenter fixedContentPresenterresizableContentPresenterを持っており、明らかにGeneric.xamlのコンテンツを持っています。 FixedContent = true;とコンテンツがのみFixedContent = false;resizableContentPresenterカスタムコントロール内のContentPresenterコンテンツのスワップ

するとき、どのように私はfixedContentPresenterのみするコンテンツを設定することができ、私は、コードの内容を変更しようとしたが、内容は表示されません。 XAML:

<Grid> 
    <ContentPresenter x:Name="fixedContent"/> 
    <Grid> 
     <ContentPresenter x:Name="resizableContent"/> 
    </Grid> 
</Grid> 
+0

あなたは私たちにあなたがしようとしたコードを示してもらえますか? –

+0

ContentControlを使用して、Contentプロパティを適切にバインドできます。これがすべてControlTemplateまたはDataTemplateにある場合は、テンプレートレベルでトリガーを使用してそれを実行できます。 –

答えて

2

は非表示にしたり、あなたが代わりにContentPresenterのここContentControlを使用する必要がありますFixedContent

<Style TargetType={x:Type ContentPresenter } x:Key="HideOrShow"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding FixedContent}" Value="False"> 
      <Setter Property="Visibility" Value="Hidden"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

トリガーは面白いですか、表示されているか隠れているかは今私が望むものです、2つのcontentpresenterの間でコンテンツを入れ替える必要があります... –

+0

@HishamMaudarbocus両方で同じ内容を表示し、もう一方はそうではなく、それは交換と同じ効果があります。 WPFでは、おそらく "スワップ"効果を生成する最も一般的な方法です。 –

+0

は、お勧めのシナリオを使用する場合、リソース使用率は同じですか? –

1

の値に応じて特定のプレゼンターを表示のいずれかに、コンテンツのプレゼンターに、暗黙的なスタイルを使用してください。

FixedContent値が変更された場合、ContentはNULLになるため、関連する副作用はありません。Animation闘争の日の後

<Grid Background="Purple"> 

    <ContentControl x:Name="fixedContent" Margin="0,75,0,0"> 
     <ContentControl.Style> 
      <Style TargetType="{x:Type ContentControl}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding FixedContent, Mode=OneWay}" Value="false"> 
         <DataTrigger.Setters> 
          <Setter Property="Content" Value="{StaticResource ContentKey}"/>        
         </DataTrigger.Setters> 
        </DataTrigger>       
       </Style.Triggers> 
      </Style> 
     </ContentControl.Style> 
    </ContentControl> 

    <Grid Background="Red" Margin="0,54,0,0"> 
     <ContentControl x:Name="resizableContent" Margin="0,75,0,0"> 
      <ContentControl.Style> 
       <Style TargetType="{x:Type ContentControl}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding FixedContent, Mode=OneWay}" Value="true"> 
          <DataTrigger.Setters> 
           <Setter Property="Content" Value="{StaticResource ContentKey}"/> 
          </DataTrigger.Setters> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </ContentControl.Style> 
     </ContentControl> 
    </Grid> 
</Grid> 
+0

私はあなたの答えが気に入っていますが、私はあなたが言及しているようにリソース割り当ての問題を話していると思いますが、私はあなたが 'FixedContent'ブール値を逆転させるロジックを持っていると信じています。この順序ではありませんが、真/偽ですが、真/偽です。 – OmegaMan

0

、私はついにのは、それが他の人を助ける期待してみましょう、@OmegaManによって提案されたものより良い答えを見つけました。ここで(両方ContentPresenterContent="{x:Null}"を追加しました)新しいXAMLだ:

<Grid> 
    <ContentPresenter x:Name="fixedContent" Content="{x:Null}"/> 
    <Grid> 
     <ContentPresenter x:Name="resizableContent" Content="{x:Null}"/> 
    </Grid> 
</Grid> 

そしてFixedContentロジック:

public bool FixedContent 
{ 
    get { return (bool)GetValue(FixedContentProperty); } 
    set 
    { 
     SetValue(FixedContentProperty, value); 
     if (value) // Is Fixed 
     { 
      ResizableContentPresenter.Content = null; 
      FixedContentPresenter.Content = Content; 
     } 
     else 
     { 
      FixedContentPresenter.Content = null; 
      ResizableContentPresenter.Content = Content; 
     } 
    } 
} 
+0

明らかに間違っています!私の答えを見てください。まず第一にあなたはここで 'ContentPresenter'を使うべきではありません。第二に、セッターにはどんな種類のコードも置くべきではありません。このプロパティの値が変更されたときにさらにアクションを起こしたい場合はどうすればよいですか? 'PropertyChangedCallback'を使うのが良いでしょうが、そこから' Control'にアクセスすることは悪いことでしょう。 – AnjumSKhan

+0

私はあなたの答えを私のコンピュータに戻すと、とにかく私は静的リソースはここに収まるとは思わない、内容はいつでも変わるかもしれないと思う。 –

+0

事は実際のシナリオに依存する。 – AnjumSKhan

関連する問題