2012-02-27 2 views
3

treeViewItem에 연결하려는 간단한 종속성 속성을 만들었습니다. 버튼과 같은 다른 컨트롤에 대해 비슷한 작업을 수행했지만 TreeViewItem을 사용하는 방법을 알 수는 없습니다. 내 정의 된 스타일을 잃지 않고 treeview에서. 아래 코드에서 " '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)); 
} 

처럼 내 트리 뷰의 스타일이 보인다 : 그래서 당신이 먼저 필요가 만들 수 있도록

<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> 
+0

내장 된 유효성 검사 서비스를 사용하고 계시지 않습니까? (이해하기 힘듭니다!) 올바른 존재인지 몰랐기 때문에 내장 된 유효성 검사 서비스를 사용하지 않습니까? IDataErrorInfo. – Will

+0

아니, 그냥 내 의존성 속성의 값을 기반으로 treeview 항목의 색상을 변경하고 싶지 않다. 이게 어려울 거라고 생각하지 않았어! – user1145533

+1

글쎄, 여러 가지 방법이 있습니다. 모델의 IDataErrorInfo (MVVM을 사용하는 경우)는 자동으로 유효성 검사를 트리거하고 표준 WPF 컨트롤에 유효하지 않은 템플릿을 표시합니다. 당신은 또한 TreeViewItem에 첨부 된 DependencyProperty를 사용하여 시도 할 수 있습니다. * 기본 클래스를 확장하는 등의 작업이 필요하지 않습니다. * WPF에서는 이런 방식으로 작업을 해본 적이 없지만, WinForms에서이 작업을 수행하는 것을 알고 있습니다. TreeView 클래스도 확장 할 수 있으므로 새 TVI를 만들면 대신 해당 유형의 인스턴스를 반환합니다. 그것은 당신의 오류가 자르기하는 곳입니다. – Will

답변

0

TreeView 기본 TreeViewItems을 만들 것입니다 : 내가 좋아하는 그것을 사용하고

 <Style TargetType="me:ErrorTreeViewItem"> 

     <Style.Resources> 
      ... 
     </Style.Resources> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TreeViewItem"> 
       ... 
      </Setter.Value> 
     </Setter> 

트리보기 항목 그렇게하려면 ErrorTreeViewItem의 새 인스턴스를 반환하려면 TreeView의 하위 클래스를 지정하고 PrepareContainerForItem을 재정의해야합니다.