Silverlight多个视图

时间:2010-10-28 19:44:57

标签: c# silverlight xaml controls radio-button

对于虚拟问题我很抱歉,我在Silverlight中很新。

我想在我的应用程序中动态更改布局:例如,我有两个单选按钮:男性和女性,我想根据所选的性别显示其他控件。

例如;如果用户检查男性选项,则应显示combobox1,如果用户检查另一个单选按钮,则应在同一位置显示另一个组合框

我可以使用stackpanel和visible属性或canvas和z属性来实现,但我想知道最佳决策是什么。

还有一个问题:可以通过单选按钮切换,还是应该使用if语句?

2 个答案:

答案 0 :(得分:1)

你可以在没有代码的情况下做到这一点。 您可以为控件添加两种状态:男性和女性。 然后定义两个状态:

男性状态:maleCombobox =可见,femaleCombobox =倒塌 女州:: maleCombobox = Visible,femaleCombobox = Collapsed

以下是示例xaml(只是一个快速示例;)):

<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    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:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"  x:Class="SilverlightApplication1.MainPage"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

 <Grid x:Name="LayoutRoot" Background="White">
  <VisualStateManager.VisualStateGroups>
   <VisualStateGroup x:Name="MaleFemaleState">
    <VisualState x:Name="FemaleState">
     <Storyboard>
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="FemaleCB">
       <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
         <Visibility>Visible</Visibility>
        </DiscreteObjectKeyFrame.Value>
       </DiscreteObjectKeyFrame>
      </ObjectAnimationUsingKeyFrames>
     </Storyboard>
    </VisualState>
    <VisualState x:Name="MaleState">
     <Storyboard>
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="MaleCB">
       <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
         <Visibility>Visible</Visibility>
        </DiscreteObjectKeyFrame.Value>
       </DiscreteObjectKeyFrame>
      </ObjectAnimationUsingKeyFrames>
     </Storyboard>
    </VisualState>
   </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>

  <i:Interaction.Triggers>
   <ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=MaleRB}">
    <ei:GoToStateAction StateName="MaleState"/>
   </ei:PropertyChangedTrigger>
   <ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=FemaleRB}">
    <ei:GoToStateAction StateName="FemaleState"/>
   </ei:PropertyChangedTrigger>
  </i:Interaction.Triggers>

  <StackPanel>
   <RadioButton GroupName="1" x:Name="MaleRB" Content="Male"/>
   <RadioButton GroupName="1" x:Name="FemaleRB" Content="Female"/>

  </StackPanel>

  <Grid Margin="40">
   <ComboBox x:Name="MaleCB" Visibility="Collapsed">
    <ComboBoxItem Content="Male"/>
   </ComboBox>
   <ComboBox x:Name="FemaleCB" Visibility="Collapsed">
    <ComboBoxItem Content="female"/>
   </ComboBox>
  </Grid>

 </Grid>
</UserControl>

不幸的是,对于触发器,您需要混合库。如果您没有混合,可以下载试用版,也可以定义状态并在后面的代码中使用VisualStateManager.GoToState(http://msdn.microsoft.com/de-de/library/system.windows。 visualstatemanager.gotostate(VS.95)的.aspx)。您将收听每个单选按钮的已检查事件,并将进入所需状态。

希望这会有所帮助,如果您需要进一步解释,请写下评论。

TJ

答案 1 :(得分:0)

首先设置每个单选按钮的GroupName属性。使用ChangePropertyAction更改每个组合框的可见性。 e.g。

 
                             可见                                              可见