对于虚拟问题我很抱歉,我在Silverlight中很新。
我想在我的应用程序中动态更改布局:例如,我有两个单选按钮:男性和女性,我想根据所选的性别显示其他控件。
例如;如果用户检查男性选项,则应显示combobox1,如果用户检查另一个单选按钮,则应在同一位置显示另一个组合框。
我可以使用stackpanel和visible属性或canvas和z属性来实现,但我想知道最佳决策是什么。
还有一个问题:可以通过单选按钮切换,还是应该使用if语句?
答案 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。
可见
可见