Wyświetla domyślną tablicę danych w ContentControl, gdy jej zawartość jest null lub pusta?
Myślę, że to możliwe, ale oczywisty sposób nie działa.
Obecnie robię to:
<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>
Nie dostaję żadnych błędów wiążących i to kompiluje. Nie przynosi to jednak oczekiwanego rezultatu. Ja też próbowałem oczywistego:
<DataTemplate DataType="{x:Null}"><TextBlock>Hurf</TextBlock></DataTemplate>
To się nie skompiluje. I próba dwukrotnego Ustawienia zawartości również nie powiodła się:
<ContentControl
Content="{Binding HurfView.EditedPart}">
<TextBlock>DEFAULT DISPLAY</TextBlock>
</ContentControl>
Czy Mogę to zrobić bez pisania niestandardowego selektora szablonów?
3 answers
Proste, musisz powiązać właściwość content W Stylu. Style Nie nadpisują wartości kontrolki, jeśli istnieje powiązanie obecne, nawet jeśli wartość jest obliczana na Null. Spróbuj tego.
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-02 19:04:53
Ponieważ natknąłem się na to pytanie i miałem ten sam problem Dzisiaj, chciałem wnieść swój wkład w inny sposób, jak rozwiązać problem. Ponieważ nie lubiłem dodawać kolejnego wyzwalacza stylów, użyłem właściwości TargetNullValue
, która wydaje się być nieco bardziej czytelna niż przyjęte rozwiązanie (które jednak działa):
<ContentControl>
<ContentControl.Content>
<Binding Path="ContentViewModel">
<Binding.TargetNullValue>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock>EMPTY!</TextBlock>
</Grid>
</Binding.TargetNullValue>
</Binding>
</ContentControl.Content>
</ContentControl>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-23 08:52:25
Możesz zwrócić DBNull.Wartość jako FallbackValue powiązania dla zawartości ContentControl i utwórz tablicę danych dla DBNull:
<DataTemplate DataType="{x:Type system:DBNull}">
<!-- The default template -->
</DataTemplate>
...
<ContentControl Content="{Binding HurfView.EditedPart, FallbackValue={x:Static system:DBNull.Value}}" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-01 19:16:14