2013-11-19 2 views
0

Я пытаюсь создать шаблон управления для Silverlight RadioButton, используя ToggleButton для каждого элемента. Проблема, с которой я сталкиваюсь, заключается в том, что механизм выбора, кажется, сломан. Вот (упрощенно) стиль Я использую:Выбор разбит на пользовательский шаблон управления RadioButton

<Style TargetType="RadioButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="RadioButton"> 
       <Grid> 
        <ToggleButton x:Name="toggle" 
            IsChecked="{TemplateBinding IsChecked}"> 
         <ContentPresenter x:Name="contentPresenter" /> 
        </ToggleButton> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Тест просто ли на самом деле работает выбор радио - так, например, текстовые блоки, представленные ниже, не показывают правильное значение при нажатии на радиокнопки:

<StackPanel> 
    <RadioButton x:Name="radio1" GroupName="Test" Content="1" /> 
    <RadioButton x:Name="radio2" GroupName="Test" Content="2" /> 
    <TextBlock Text="{Binding ElementName=radio1,Path=IsChecked,StringFormat='Radio 1 checked: {0}'}" /> 
    <TextBlock Text="{Binding ElementName=radio2,Path=IsChecked,StringFormat='Radio 2 checked: {0}'}" /> 
</StackPanel> 

Можно было бы подумать, что, возможно, есть именованная часть в шаблоне управления, которая использует элемент управления для обновления выбора - однако, the docs indicate no named parts. Итак, что здесь происходит, и как я могу заставить мой пример работать?

ответ

0

Можно было бы подумать, что, возможно, есть именованная часть в шаблоне управления

Да ... оказывается, есть «документировано». Пробная версия и ошибка показывают, что «BoxMiddleLine» - это именованная часть, которая управляет выбором. Поэтому добавление к шаблону управления кликабельного элемента с этим именем устраняет проблему:

<Grid> 
    <Border x:Name="BoxMiddleLine" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#0000" /> 
    <ToggleButton x:Name="toggle" 
        IsChecked="{TemplateBinding IsChecked}" 
        IsHitTestVisible="False"> 
     <ContentPresenter x:Name="contentPresenter" /> 
    </ToggleButton> 
</Grid> 

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

  • Нет связанных вопросов^_^