2016-05-25 7 views
1

ExpanderにDockPanel.Dockをアタッチできますが、ToggleButton.IsCheckedをアタッチできません。どうして?ToggleButton.IsCheckedプロパティをエキスパンダーにアタッチできない

<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)); 

DockRegisterAttached方法の代わりに、Registerに登録されています。

+0

外部トグルボタンを使用してエクスパンダを拡張しようとしているのですか、単にエクスパンダをデフォルトで拡張しようとしていますか? –

+0

私は単にこのエキスパンダーに "IsChecked"プロパティを追加しようとしています。これは、 "IsExpanded"プロパティにバインドされることを意図しない。 –

+0

Expanderが 'ToggleButton'を持っていて、' ToggleButton'の 'ControlTemplate'の一部として独自の' IsChecked'プロパティで独自の状態を設定している理由は分かりません。認知症の答えはあなたの質問に答えます。 –

答えて

2

IsCheckedは接続可能なプロパティではありません。あなたはトグルボタン、あなたは次の操作を行うことができますエキスパンダーをバインドするために探している場合:

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

私は実際には、外部ToggleButtonのポイントが表示されません。エクスパンダには既に1つがあります。単に 'を宣言して設定するのはなぜですか?私はOPがこれを理解することを望んでいる。 –

+1

@IsaiahNelsonほとんどの場合、Expanders IsExpandedプロパティで十分です。私はOPが何か違うものを探していると思っています。 – PlantPorridge

+0

私の質問は次のようなものです: "Dock"はどのようなものに取り付けることができますか?ソースコードの観点からは、2つのプロパティ(DockとIsChecked)が似ています。私はその質問のコメントに私の意図を説明しようとしました。 –

0

両方の依存関係プロパティですが、あなたが指摘したように、1レジスタであり、1がRegisterAttachedされます。それは違いで、IsCheckedを他のコントロールに公開することはできません。 2つの登録方法の違いの詳細については、SO Post.にあるさまざまな回答(特にHaris Hasan's)を参照してください。あなただけのチェックボックスが既に存在してトグルボタンに加えて、エキスパンダー(ヘッダー)に追加したい場合は、上記のあなたのコメントを1として

、単純にこれを行いません。

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

が次に何がありますエクスパンダに公開される理由 - IsCheckedを設定またはバインドすることができます。

これはいくつかの役に立ちました。

+0

特定のスタイルキーのすべての 'Expander'に' CheckBox'を入れたいと思っていました。だから、私は 'IsChecked'を前述の添付プロパティにバインドしたかったのです。 –

関連する問題