2012-08-29 160 views
0

正如標題所說,我想隱藏或動態顯示一些內容。我有兩個按鈕像單選按鈕一樣工作。每個按鈕都必須顯示特定的內容,但這兩個內容不能同時顯示(這是一種形式,而我正在處理兩個子類)。動態顯示/顯示wpf內容

我見過這兩個有趣的事情,我想混合它們。首先,使用ContentControl和ToggleButton(http://stackoverflow.com/questions/7698560/how-to-bind-click-of-a-button-to-change-the-content-of-a-panel-網格使用-XAML)。其次,使用ToggleButtons作爲RadioButtons(http://stackoverflow.com/questions/2362641/how-to-get-a-group-of-toggle-buttons-to-act-like-radio-buttons-in-wpf第二個答案31)

所以我決定開始與類似的東西:

<ContentControl> 
    <ContentControl.Template> 
     <ControlTemplate> 
      <WrapPanel HorizontalAlignment="Center"> 
       <TextBlock Text="{x:Static Internationalization:Resources.MAINOPTIONSWINDOW_STATUSLINKSUPERVISOR}"/> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Alarm" GroupName="Trigger"/> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Event" GroupName="Trigger"/> 

      </WrapPanel> 
     </ControlTemplate> 
    </ContentControl.Template> 
</ContentControl> 

但Visual Studio中強調

{StaticResource {x:Type ToggleButton}} 

在視覺上,我的按鈕看起來像單選按鈕,而不是切換按鈕。 視覺說:

不可能解決資源 「{StaticResource的{X:類型 切換按鈕}}」(譯自法語;))

反正這個代碼工作的ContentControl中外部的微小。

回答

0

在控件模板中,您通常不會添加事件處理程序。

覆蓋OnApplyTemplate並在那裏添加處理程序。

1

是的,首先,修復你的eventHandlers。不要將它們附加在模板上,棘手的事情可能會發生。

所有的二,你可以修改你ContentControl.Resources,並把這個有:

<Style BasedOn="{StaticResource {x:Type ToggleButton}}" 
      TargetType="RadioButton"/> 

,並刪除自己的風格定義。你甚至可以把這個級別放多一些(ContentControl的父級)。還有一件事,你是在代碼隱藏方面做的,但我可以向你保證,WPF的真正威力來自於你不需要代碼隱藏的事實,至少對於這樣的邏輯來說。

另外你給的鏈接,它是使用觸發器。這現在不是什麼大問題,但你應該知道這不是正確的方法。如果您想在內容之間切換,請查看ContentControl Content,DataTemplates,DataTemplateSelector。這個想法是在記憶中只有一個VIEW,而不是隱藏事物。

如果你以另一種方式做事,那可以趕上。它最終會爲啓動和內存使用增加更多時間。

0

我終於找到另一種方式

<RadioButton Content="Alarm" GroupName="TriggerStateInfo" Style="{StaticResource {x:Type ToggleButton}}" 
     Command="{x:Static StateInfoTemplateToAlarmCommand}"/> 
<RadioButton Content="Event" GroupName="TriggerStateInfo" Style="{StaticResource {x:Type ToggleButton}}" 
       Command="{x:Static StateInfoTemplateToEventCommand}"/> 
<ContentControl Content="{Binding Path=Trigger, ElementName=Window}"> 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type States:AlarmTrigger}"> 
      <ComboBox ItemsSource="{Binding Path=AlarmTriggersCollection}" /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type States:EventTrigger}"> 
      <ComboBox ItemsSource="{Binding Path=EventTriggersCollection}" /> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 

隨着後面的代碼改變觸發

的類型