2014-08-27 64 views
0

我需要做一個組件,當某些屬性發生變化時,複選框會變成單選按鈕。我不知道如何在xaml中做這種改變。該複選框位於如下所示的數據模板中。現在我只需要一些邏輯就可以將它變成單選按鈕。我如何動態地將WPF控件更改爲另一個?

<DataTemplate> 
    <CheckBox IsChecked="{Binding IsSelected.Value, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
</DataTemplate> 
+7

添加另一個「RadioButton」,根據您的邏輯更改兩個控件的「可見性」。 – Bolu 2014-08-27 13:12:18

+0

問題似乎是DataTemplate中只能有一個控件。 – ggrd4rk 2014-08-27 13:19:12

+0

用'Grid'或'StackPanel'等括起來。 – Bolu 2014-08-27 13:22:36

回答

0

您可以在DataTemplate把兩隻CheckBoxRadioButton在一個容器(StackPanel爲例),只是根據使用DataTrigger你的病情崩潰其中之一。

我希望它能幫助你。對不起我的純英文。

<DataTemplate> 
    <StackPanel> 
     <CheckBox Content="CheckBoxHeader"> 
      <CheckBox.Style> 
       <Style TargetType="CheckBox"> 
        <Setter Property="Visibility" Value="Visible"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Condition}" Value="True"> 
          <Setter Property="Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </CheckBox.Style> 
     </CheckBox> 
     <RadioButton Content="RadioButtonHeader"> 
      <RadioButton.Style> 
       <Style TargetType="RadioButton"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Condition}" Value="True"> 
          <Setter Property="Visibility" Value="Visible"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton>       
    </StackPanel> 
</DataTemplate> 
+0

請解釋你的答案,不要放置一些代碼。 – Hari 2014-08-27 13:57:00

2

尤其是當有很多實例,有DataTemplate內都控制和改變的知名度可能不是理想的考慮性能和內存使用的解決方案。在這種情況下,DataTemplateSelector可能會訣竅 - 請參閱this tutorial

+0

倒塌並不可怕,可以讓你創造一個過渡。從度量和佈局過程中刪除該元素,並且WPF的依賴項屬性結構的設計也將大場景圖中的內存使用量降至最低。 – Gusdor 2014-08-27 14:26:22

+1

你是對的,它絕對不是,我在我的幾個應用程序中使用崩潰方法(項目數量很少)。我只是想表明有一種替代方法。 – andreask 2014-08-27 14:39:50

相關問題