반응형
내용이 null이거나 비어 있을 때 ContentControl에 기본 DataTemplate를 표시하시겠습니까?
저는 이것이 가능하다고 생각하지만, 분명한 방법은 작동하지 않습니다.
현재 저는 다음과 같은 일을 하고 있습니다.
<ContentControl
Content="{Binding HurfView.EditedPart}">
<ContentControl.Resources>
<Style
TargetType="ContentControl"
x:Key="emptytemplate">
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content}"
Value="{x:Null}">
<Setter
Property="ContentControl.Template">
<Setter.Value>
<ControlTemplate>
<Grid
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<TextBlock>EMPTY!</TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Resources>
</ContentControl>
바인딩 오류가 발생하지 않고 컴파일이 완료됩니다.하지만, 그것은 기대했던 결과를 만들어내지 못합니다.저는 또한 당연한 것을 시도했습니다.
<DataTemplate DataType="{x:Null}"><TextBlock>Hurf</TextBlock></DataTemplate>
컴파일이 안 됩니다.또한 콘텐츠를 두 번 설정하는 시도도 실패합니다.
<ContentControl
Content="{Binding HurfView.EditedPart}">
<TextBlock>DEFAULT DISPLAY</TextBlock>
</ContentControl>
사용자 지정 템플릿 선택기를 작성하지 않고도 이 작업을 수행할 수 있습니까?
단순하게, 내용 속성을 스타일에 바인딩해야 합니다.바인딩이 있으면 값이 Null로 평가되더라도 스타일은 컨트롤의 값을 덮어쓰지 않습니다.이거 먹어봐요.
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content" Value="{Binding HurfView.EditedPart}" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content}" Value="{x:Null}">
<Setter Property="ContentControl.Template">
<Setter.Value>
<ControlTemplate>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock>EMPTY!</TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
저는 이 문제를 우연히 발견했고 오늘 같은 문제를 겪었기 때문에, 제가 문제를 어떻게 해결했는지 다른 방법으로 기여하고 싶었습니다.다른 스타일 트리거를 추가하고 싶지 않았기 때문에 속성을 사용했습니다.TargetNullValue
이는 허용된 솔루션보다 조금 더 읽기 쉬운 것으로 보입니다(그럼에도 불구하고 작동함).
<ContentControl>
<ContentControl.Content>
<Binding Path="ContentViewModel">
<Binding.TargetNullValue>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock>EMPTY!</TextBlock>
</Grid>
</Binding.TargetNullValue>
</Binding>
</ContentControl.Content>
</ContentControl>
DBNull을 반환할 수 있습니다.ContentControl 내용에 대한 바인딩의 폴백 값으로 값을 지정하고 DBNull용 데이터 템플릿을 만듭니다.
<DataTemplate DataType="{x:Type system:DBNull}">
<!-- The default template -->
</DataTemplate>
...
<ContentControl Content="{Binding HurfView.EditedPart, FallbackValue={x:Static system:DBNull.Value}}" />
언급URL : https://stackoverflow.com/questions/1217254/display-a-default-datatemplate-in-a-contentcontrol-when-its-content-is-null-or-e
반응형
'sourcetip' 카테고리의 다른 글
Eclipse에서 열 선택 모드를 활성화하려면 어떻게 해야 합니까? (0) | 2023.06.02 |
---|---|
Xcode를 사용하여 .ipa 파일을 만드는 방법은 무엇입니까? (0) | 2023.06.02 |
ubuntu 16.04 LTS에서 mongodb 실행 (0) | 2023.05.28 |
Git 커밋 날짜 (0) | 2023.05.28 |
Enum "상속" (0) | 2023.05.28 |