2010-10-28 42 views
1

對不起虛擬問題,我在Silverlight中很新。Silverlight多個視圖

我要動態地改變我的應用程序的佈局:例如,我有兩個單選按鈕:男性和女性,我想表明取決於所選擇的性別額外的控制。

例如;如果用戶檢查男性選項,則應顯示combobox1,如果用戶檢查另一個單選按鈕,則應在同一位置顯示另一個組合框

我可以使用的StackPanel和Visible屬性或用帆布和z屬性做到這一點,但我想知道最好的決定是什麼。

還有一個問題:可以通過一個單選按鈕切換,還是應該if語句別人使用?

回答

0

首先設置每個單選按鈕的GroupName屬性。使用ChangePropertyAction更改每個組合框的可見性。例如


可見 可見

1

你可以做到這一點沒有後面的代碼。 您可以在控件中添加兩個狀態:男性和女性。 然後你定義兩種狀態:

男狀態: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