2016-05-17 16 views
0

申し訳ありませんが、私はこのような状況をしたと仮定し、より良いそれを説明しようとするでしょう:どのように違う表示グリッドがコントロールからクリックされましたか?誤解を招くタイトル

<Window x:Class="Test.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Test" 
    mc:Ignorable="d" 
    Title="Window1" Height="300" Width="300"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <Grid Grid.Column="0" Grid.Row="0"> 
     <TabControl> 
      <TabItem Header="1" /> 
      <TabItem Header="2" /> 
     </TabControl> 
    </Grid> 

    <Grid Grid.Column="0" Grid.Row="1"> 
     <StackPanel Visibility="Hidden"> 
      <Button Content="1"/> 
     </StackPanel> 
     <StackPanel Visibility="Visible"> 
      <Button Content="2"/> 
     </StackPanel> 
    </Grid> 
</Grid> 
</Window> 

は今、私の目標は次のとおりです。header = 1TabItemの際にユーザーのクリック、ボタンでStackPanelcontent = 1ユーザーがTabItem = 2をクリックしたときにもcontent = 2のボタンが表示されるはずです。

実際に私はコード(c#)の後ろでこれを行うことができますが、これはwpfでしか管理できません。

+0

は、なぜあなたはどのように 'TabControl'を使用していない....変更しましたそれは 'TabItems'の中にタブの内容を置く、すなわち使われることになっていますか? (これは単純すぎるのですか?これは手動で行う必要がありますか?) –

+0

@ H.B。 '私はTabControlの外にボタンを持っている必要があるので、 – IlDrugo

答えて

1

複数のオプションがあります。所与例えば

最速と汚いは、選択された項目TabControlHeaderにトリガするであろう:

<Grid Grid.Column="0" Grid.Row="0"> 
    <TabControl Name="tc"> 
     <TabItem Header="1" /> 
     <TabItem Header="2" /> 
    </TabControl> 
</Grid> 

<Grid Grid.Column="0" Grid.Row="1"> 
    <Button Content="1"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=tc, Path=SelectedItem.Header}" 
           Value="1"> 
         <Setter Property="Visibility" Value="Visible"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
    <Button Content="2"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=tc, Path=SelectedItem.Header}" 
           Value="2"> 
         <Setter Property="Visibility" Value="Visible"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</Grid> 

(デフォルトの可視性が原因の優先順位にSetterにする必要がある。)


より洗練された/よりモジュラーなソリューションは、ボタンロジックと外観をカプセル化し、ボタンセクションのデータを選択した項目のボタンビューにバインドするバッキングビューモデルを持つことです。モデル。ボタンはdata templatingで作成されます。

+0

可能です完全なスタックパネルの内容を表示しますか?私はターゲットだけを変更する必要があります。 TabItem.HeaderとしてImageコントロールを使用していれば、これは動作しません。 – IlDrugo

+0

@IlDrugo: 'ContentControl'などにラップする必要があります。パネルには' Style'プロパティがないので、移動するだけです'TargetType'を変更してスタイルを変更しました。 –

+0

ヘッダーに画像コントロールのみが含まれている場合は?別のトリックがありますか? – IlDrugo

-1

あなたは単にのようなコントロール名前を付けることができます:

<Stackpanel x:Name="spCon1" ../> 

をそしてただのTabControlのイベントをトリガ、選択のようなものは

+2

質問の最後の部分は読んでいますか? –

+0

ああ、ミッドリーディングのために申し訳ありません:) – Excalibrus

関連する問題