2016-05-25 5 views
1

Мы можем подключить DockPanel.Dock к расширителю, но мы не можем подключить ToggleButton.IsChecked. Зачем?Почему я не могу подключить ToggleButton.IsChecked к Expander

<Expander DockPanel.Dock='Bottom'> <!--Compile--> 
<Expander ToggleButton.IsChecked='True'> <!--Doesn't compile--> 

Я нашел ответ в источнике:

От ToggleButton:

public static readonly DependencyProperty IsCheckedProperty = 
      DependencyProperty.Register(
        "IsChecked", 
        typeof(bool?), 
        typeof(ToggleButton), 
        new FrameworkPropertyMetadata(
          BooleanBoxes.FalseBox, 
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal, 
          new PropertyChangedCallback(OnIsCheckedChanged))); 

Форма DockPanel:

public static readonly DependencyProperty DockProperty = 
      DependencyProperty.RegisterAttached(
        "Dock", 
        typeof(Dock), 
        typeof(DockPanel), 
        new FrameworkPropertyMetadata(
         Dock.Left, 
         new PropertyChangedCallback(OnDockChanged)), 
        new ValidateValueCallback(IsValidDock)); 

Dock зарегистрирован RegisterAttached методом вместо Register.

+0

Вы пытаетесь использовать внешнюю кнопку переключения, чтобы развернуть Expander или просто пытаетесь развернуть Expander по умолчанию? –

+0

Я просто пытаюсь добавить свойство «IsChecked» этому расширителю. Он не предназначен для привязки к свойству IsExpanded. –

+0

Непонятно, почему вы хотели бы это сделать, поскольку у Expander есть «ToggleButton», и он устанавливает свое собственное состояние с помощью собственного свойства IsChecked, кроме «ToggleButton'' ControlTemplate'. Ответ на познание ниже отвечает на ваш вопрос. –

ответ

2

IsChecked не является прикрепляемым. Если вы хотите связать ToggleButton и расширитель вы можете сделать следующее:

<ToggleButton x:Name="toggle" IsChecked="True" /> 
<Expander IsExpanded="{Binding ElementName=toggle, Path=IsChecked}" /> 
+0

Я действительно не вижу точки внешнего ToggleButton. У Expander уже есть один. Почему бы просто не объявить и не установить ''? Я надеюсь, что ОП это поймет. –

+1

@IsaiahNelson В большинстве случаев свойство Expanders IsExpanded должно быть достаточным. Я предполагаю, что OP ищет что-то другое. – PlantPorridge

+0

Тогда мой вопрос будет: что делает «док» прикрепляемым? С точки зрения исходного кода два свойства (Dock и IsChecked) кажутся похожими. Я попытался объяснить свое намерение в комментарии к вопросу. –

0

Оба свойства зависимостей, но, как вы отметили, один реестр и один RegisterAttached. В этом разница и почему IsChecked не может быть выставлен на другие элементы управления. См. Различные ответы (особенно Харис Хасан) в этом SO Post. для лучшего объяснения различий между двумя методами регистрации.

В соответствии с Вашим комментарием выше, если вы просто хотите CheckBox быть добавлены к Expander (заголовок) в дополнение к ToggleButton, что уже существует, то просто не делать этого:

<Expander> 
    <Expander.Header> 
     <CheckBox VerticalAlignment="Center" IsChecked="{Binding MyBooleanPropertySomewhere, Mode=TwoWay}"/> 
    </Expander.Header> 
</Expander> 

Тогда нет причина, чтобы он был выставлен на Expander - вы можете установить или привязать IsChecked прямо там.

Надеюсь, это помогло некоторым.

+0

Я хотел поставить «CheckBox» для всех расширителей определенного ключа стиля. Поэтому я хотел связать «IsChecked» с указанным приложением. –

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

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