WPFボーダーDesiredHeight
-
22-08-2019 - |
質問
次の内容が含まれていに、次のマイクロソフトのコード例:
<Grid>
...
<Border Name="Content" ... >
...
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter TargetName="ContentRow" Property="Height"
Value="{Binding ElementName=Content,Path=DesiredHeight}" />
</Trigger>
...
</ControlTemplate.Triggers>
実行すると、しかし、このコードは、次のデータバインディングエラーを生成
System.Windows.Data Error: 39 : BindingExpression path error: 'DesiredHeight' property not found on 'object' ''Border' (Name='Content')'. BindingExpression:Path=DesiredHeight; DataItem='Border' (Name='Content'); target element is 'RowDefinition' (HashCode=2034711); target property is 'Height' (type 'GridLength')
このエラーが発生しても、コードが正常に動作します。私は、ドキュメントに目を通しているとDesiredHeight
はBorder
のメンバーであることが表示されません。 DesiredHeight
がどこから来ている誰も説明できますか?また、私のプログラムの出力がクリーンであるように、このエラーを抑制/解決する方法はありますか?
解決
あなたは、アプリケーションのコードの一部で、そのプロパティを見ることができます。
編集ます:
Border content = new Border();
int desiredHeight = content.DesiredSize.Height;
int desiredWidth = content.DesiredSize.Width;
問題を解決するためにDesiredHeightが境界線コントロールのXAMLマークアップで利用可能ではないようですから、height属性にバインドしようとします。
他のヒント
私はこれに走ってきました。トリガがRowDefinationにHeigth =「0」を除去するので、その例としては、どのような作品user275587が言った、の線に沿っています。
だから私は高さの設定/トリガロジックを切り替えるので、RowDefinationは何の高さが設定されていない
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Name="ContentRow" />
</Grid.RowDefinitions>
...
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="False">
<Setter TargetName="ContentRow" Property="Height" Value="0" />
</Trigger>
</ControlTemplate.Triggers>
それを試してみます。
<Setter
TargetName="content"
Property="Height"
Value="{Binding ElementName=content, Path=DesiredHeight}"
/>
↓
<Setter TargetName="content" Property="Height" Value="NaN"/>
バインディングは不要である。
私は自分のアプリケーションで同じ問題時に思いつきました。 IはCollapsed
とVisible
間のコンテンツの可視性をトグルし、Grid
でStackPanel
を置換するように、最終的に、私は、コードを変更します。
私は一般的にMSコントロールテンプレートサンプルの品質はかなり良いことが判明しましたが、この1とのエラーは少しイライラさせられた。
同じ問題が、カルロによって受け入れられた解決策は完璧に動作しません。 ポスターは直面していた問題は、離れて行くが、Expanderは、部分的に壊す -
あなたがすでに展開し、膨張して展開する必要がありますいくつかのコンテンツを持っている場合、それはのDesiredSize.Height のへのバインディングとそうではないだろう、あなたはのDesiredHeight の必要がある - かもしれませんuser275587によって与えられた理由のためである。
同じ問題を持っていました。カスタムExpander
のカスタムComboBox
を使用していました。
上記のいずれもHeight
は、各グループ内の項目の表示を破っ使用して、Expander
の機能を壊し、私のために働いていないStackPanel
に結合します。私が見つけます:
<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>
DesiredHeightは、コンテンツ要素から来て、それが有効なバインディングです。私はDesiredHeightがHeightプロパティに依存していると、それはDouble.Nanと評価されて、あなたのテンプレートで固定の高さを設定していないので、あなたが解決しない結合の理由があると思います。