對不起虛擬問題,我在Silverlight中很新。Silverlight多個視圖
我要動態地改變我的應用程序的佈局:例如,我有兩個單選按鈕:男性和女性,我想表明取決於所選擇的性別額外的控制。
例如;如果用戶檢查男性選項,則應顯示combobox1,如果用戶檢查另一個單選按鈕,則應在同一位置顯示另一個組合框。
我可以使用的StackPanel和Visible屬性或用帆布和z屬性做到這一點,但我想知道最好的決定是什麼。
還有一個問題:可以通過一個單選按鈕切換,還是應該if語句別人使用?
對不起虛擬問題,我在Silverlight中很新。Silverlight多個視圖
我要動態地改變我的應用程序的佈局:例如,我有兩個單選按鈕:男性和女性,我想表明取決於所選擇的性別額外的控制。
例如;如果用戶檢查男性選項,則應顯示combobox1,如果用戶檢查另一個單選按鈕,則應在同一位置顯示另一個組合框。
我可以使用的StackPanel和Visible屬性或用帆布和z屬性做到這一點,但我想知道最好的決定是什麼。
還有一個問題:可以通過一個單選按鈕切換,還是應該if語句別人使用?
首先設置每個單選按鈕的GroupName屬性。使用ChangePropertyAction更改每個組合框的可見性。例如
可見 可見
你可以做到這一點沒有後面的代碼。 您可以在控件中添加兩個狀態:男性和女性。 然後你定義兩種狀態:
男狀態:maleCombobox =可見,femaleCombobox =摺疊 女狀態:maleCombobox =可見,femaleCombobox =摺疊
下面是示例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