2010-05-12 2 views
4

Я пишу элемент управления, который наследуется от RadioButton и не делает ничего более впечатляющего, чем отображение изображения и скрытие круга по умолчанию.Наследование VisualState в Silverlight

Одна вещь, о которой я не смог узнать, - это если мне нужно снова реализовать все VisualStates в моей контрольной таблице, или я могу просто разместить их как пустой элемент, и они унаследованы?

Мой XAML находится ниже, the original RadioButton is on MSDN.

<Style TargetType="local:ImageRadioButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:ImageRadioButton"> 
       <Grid> 
        <vsm:VisualStateManager.VisualStateGroups> 
         <vsm:VisualStateGroup x:Name="CommonStates"> 
          <vsm:VisualState x:Name="Normal"/> 
          <vsm:VisualState x:Name="MouseOver"> 
           <Storyboard/> <!-- mouseover --> 
          </vsm:VisualState> 
          <vsm:VisualState x:Name="Pressed" /> 
          <vsm:VisualState x:Name="Disabled"/> 
          <!-- TODO --> 
         </vsm:VisualStateGroup> 
         <vsm:VisualStateGroup x:Name="CheckStates"> 
          <vsm:VisualState x:Name="Checked"> 
           <Storyboard/> 
           <!-- checked --> 
          </vsm:VisualState> 
          <vsm:VisualState x:Name="Unchecked"/> 
         </vsm:VisualStateGroup> 

         <vsm:VisualStateGroup x:Name="FocusStates"> 
          <vsm:VisualState x:Name="Focused" /> 
          <vsm:VisualState x:Name="Unfocused" /> 
         </vsm:VisualStateGroup> 
         <vsm:VisualStateGroup x:Name="ValidationStates"> 
          <vsm:VisualState x:Name="Valid"/> 
          <vsm:VisualState x:Name="InvalidUnfocused" /> 
          <vsm:VisualState x:Name="InvalidFocused" /> 
         </vsm:VisualStateGroup> 
        </vsm:VisualStateManager.VisualStateGroups> 

        <ContentPresenter/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ответ

2

Вы не имеют переописать визуальные состояния, но они не будут «по наследству» либо. Если вы укажете новый DefaultStyleKey для своего нового элемента управления, вы ничего не получите из оригинального стиля.

Если вы хотите, чтобы ваш новый элемент управления изменил свой внешний вид, чтобы представить его текущее состояние, например, имеет ли он фокус, или его выбор, вам нужно будет включить соответствующий набор VisualStateGroups. Затем включите в элементы VisualState соответствующие анимации, чтобы изменить новую версию пользовательского интерфейса кнопки.

+0

Есть ли какой-либо вопрос, включая '' , '' и т. Д. Пустые элементы? –

3

Это все или ничего. Если вы замените шаблон, вы должны предоставить его все, включая визуальные состояния. Blend упрощает редактирование копии шаблона по умолчанию.

+0

Так больно, но так верно. – jpierson

Смежные вопросы