2016-05-17 39 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> 

我現在的目標就是:在TabItemheader = 1用戶點擊後,StackPanel與按鈕content = 1應該顯示,並且當用戶點擊TabItem = 2時,應該顯示帶有content = 2的按鈕。

其實我知道我怎麼能做到這一點後面的代碼(c#),但是可能只管理wpf?

+0

你爲什麼不使用'TabControl'如何它應該被使用,即把標籤內容放在'TabItems'裏面? (這是過於簡單化,你真的需要手動做到這一點?) –

+0

@ H.B。因爲我需要在TabControl外面有按鈕 – IlDrugo

回答

1

有多種選擇。

最快和最髒對於給定的例子將是在其上觸發TabControl的所選擇的項目Header:(默認的可見性必須在Setter由於優先)

<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> 


更清潔/更模塊化的解決方案應該是具有封裝按鈕邏輯和外觀的後臺視圖模型,然後將按鈕部分的數據綁定到所選項目的按鈕視圖 - 模型。該按鈕將通過data templating創建。

+0

是否可以顯示完整的堆棧面板內容? Perphaps我應該只改變目標,對吧?如果我將TabItem.Header設置爲Image控件,則不起作用 – IlDrugo

+0

@IlDrugo:您需要將其包裝在「ContentControl」或類似內容中,面板沒有「Style」屬性,那麼您需要移動那裏的風格,改變'TargetType'。 –

+0

如果標題僅包含圖像控件?還有另一個竅門? – IlDrugo

-1

你可以簡單的名稱,如控件:

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

然後就是觸發的TabControl事件,類似的選擇改變了....

+2

你讀過這個問題的最後部分了嗎? –

+0

哦,對不起,錯過:) – Excalibrus

相關問題