ItemsControl (하위 클래스를 EnhancedItemsControl이라고 함)을 서브 클래 싱하는 중입니다. ScrollViewerTemplate 종속성 속성을 표시하여 사용자가 사용하는 ScrollViewer에 대한 자체 템플릿을 선택적으로 지정할 수있게하고 싶습니다. 나는 이런 식으로 일을하고있다 :WPF : 템플릿 유형의 종속성 속성 - 기본 템플릿을 가져올 위치 (기본값으로 설정)?
내 EnhancedItemsControl 내 기본 스타일에서public ControlTemplate ScrollViewerTemplate
{
get { return (ControlTemplate)GetValue(ScrollViewerTemplateProperty); }
set { SetValue(ScrollViewerTemplateProperty, value); }
}
public static readonly DependencyProperty ScrollViewerTemplateProperty =
DependencyProperty.Register(
"ScrollViewerTemplate",
typeof(ControlTemplate),
typeof(EnhancedItemsControl),
new UIPropertyMetadata(new ScrollViewer().GetValue(ScrollViewer.TemplateProperty))); //This doesn't work for me
, 나는 다음과 같이에서 ScrollViewer를 포함
<ScrollViewer
Template="{TemplateBinding ScrollViewerTemplate}"
...
>
<ItemsPresenter
...
/>
</ScrollViewer>
이것은 사용자가 ScrollViewerTemplate를 지정하면 작동하지만 그가 떠날 때 기본값으로 ScrollViewer가 표시되지 않습니다 (아마도 템플릿이 비어 있기 때문일 것입니다). WPF에게 어떻게 알릴 수 있습니까 템플릿이 null이 아닌 경우에만 사용하십시오. 그렇지 않으면 기본값을 사용하십시오? (그것은 내가 null이 아닌 경우에만 템플릿을 설정하기 위해 트리거를 사용할 수 있었지만 각 컨트롤의 모든 사용자 정의 속성에 대한 트리거를 가지고 있다는 아이디어가 마음에 들지 않았습니다 ...)
스타일에도 비슷한 문제가 있습니다. 사용자가 ScrollViewer 스타일을 지정하도록하고 싶지만 사용자가 지정하지 않으면 ScrollViewerStyle의 값이 null이됩니다 (<ScrollViewer Style="{x:Null}" />
). 그러면 기본 스타일이 적용되지 않습니다.
해결 방법? 고맙습니다!
감사합니다. 당신은 그 사람입니다! 나는 타입에 의해 인덱싱 된 리소스 딕셔너리로부터 기본 스타일을 얻을 수 있다는 것을 알지 못했다. 꽤 직관적이지 않다. 나를 보여 주셔서 다시 한번 감사 드리며, null이 아닐 때 스타일/템플릿에 트리거를 할당하는 것보다 훨씬 낫다. –
그 밖의 모든 것이 불확실하지만, 한 가지는 확실합니다. 나는 그 사람입니다. :) –