Silverlight несколько просмотров - PullRequest
1 голос
/ 28 октября 2010

Извините за глупый вопрос, я довольно новичок в Silverlight.

Я хочу динамически изменять макет в моем приложении: например, у меня есть две переключатели: мужской и женский, и я хочу показать дополнительные элементы управления в зависимости от выбранного пола.

Например; Если пользователь выбирает мужской вариант, должен отображаться combobox1, а если пользователь проверяет другую радиокнопку, в этом же месте должен отображаться .

Я могу сделать это с помощью стека и свойства visible или со свойством canvas и z, но я хочу знать, какое решение лучше.

И еще один вопрос: можно ли переключаться между переключателями или использовать другие операторы if?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Вы можете сделать это без кода позади.Вы можете добавить два состояния для вашего контроля: мужской и женский.Затем вы определяете два своих состояния:

Состояние мужчины: maleCombobox = Visible, femaleCombobox = Collapsed Состояние State:: 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>

К сожалению, для триггеров нужны смешанные библиотеки.Если у вас нет blend, вы можете загрузить пробную версию или определить свои состояния и использовать VisualStateManager.GoToState в своем коде (http://msdn.microsoft.com/de-de/library/system.windows.visualstatemanager.gotostate(VS.95).aspx).. Вы будете прослушивать проверенное событие каждой радиокнопки и переходите к нужномуstate.

Надеюсь, это поможет, если вам нужны дополнительные объяснения, просто напишите комментарий.

TJ

0 голосов
/ 29 октября 2010

Прежде всего установите свойство GroupName каждой кнопки-переключателя.Используя ChangePropertyAction, измените видимость каждого выпадающего списка.например,


Видимый Видимый

...