3
TreeViewItemにアタッチする単純な依存プロパティを作成しましたが、これはボタンなどの他のコントロールでも同様ですが、TreeViewItemの使い方を理解できません私の定義されたスタイルを失うことなくツリービューで。以下のコードでは、 "'ErrorTreeViewItem'型用のスタイルは 'TreeViewItem'型には適用できません。"WPFのTreeViewItemをサブクラス化してtreevviewで使用する方法
public class ErrorTreeViewItem : TreeViewItem
{
static ErrorTreeViewItem()
{
}
public bool ErrorState
{
get { return (bool)GetValue(ErrorStateProperty); }
set { base.SetValue(ErrorStateProperty, value); }
}
public static readonly DependencyProperty ErrorStateProperty =
DependencyProperty.Register("ErrorState", typeof(bool), typeof(ErrorTreeViewItem), new UIPropertyMetadata(false));
}
私のツリービューのスタイルは次のようになります。
<Style TargetType="me:ErrorTreeViewItem">
<Style.Resources>
...
</Style.Resources>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeViewItem">
...
</Setter.Value>
</Setter>
私はそれが好きで使用しています:
<TreeView Name="ApplicationTree" ItemsSource="{Binding Applications}" HorizontalContentAlignment="Stretch" Background="#E8E8E8" >
<TreeView.ItemContainerStyle>
<Style TargetType="me:ErrorTreeViewItem" BasedOn="{StaticResource {x:Type TreeViewItem}}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</TreeView.ItemContainerStyle>
あなたがそれらを理解していない(組み込みが難しい)ために、またはそれらが存在していることを知らなかったため、組み込みの検証サービスを使用していませんか? IDataErrorInfo。 – Will
いいえ、自分の依存関係プロパティの値に基づいてツリービュー項目の色を変更したいだけではありません。これは難しいとは思わなかった! – user1145533
これを行うにはいくつかの方法があります。モデルのIDataErrorInfo(MVVMを使用している場合)は自動的に検証をトリガし、標準のWPFコントロールで無効なテンプレートを表示します。また、TreeViewItemに添付されたDependencyPropertyを使ってみることもできるので、基本クラスなどを拡張する必要はありません*私はWPFでこれをやったことはありませんが、WinFormsでこれを達成することは分かっていますTreeViewクラスを拡張することもできます。新しいTVIを作成するときは、代わりにそのタイプのインスタンスを返します。それはあなたのエラーが上がっているところです。 – Will