#wpf #xaml
#wpf #xaml
Вопрос:
Я хочу установить некоторый текст по умолчанию на фоне элемента управления (например, TreeView, ListView, GridView и т.д.). Текст отображается, когда в элементе управления items нет элемента, и скрывается, когда элемент управления items не пуст.
Я представляю это так:
Ответ №1:
для этого я использую следующий стиль.
<Style x:Key="{x:Type ItemsControl}" TargetType="{x:Type ItemsControl}">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<TextBlock Text="No Data"
FontFamily="Consolas"
FontSize="16"/>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Items, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<TextBlock Text="No Data"
FontFamily="Consolas"
FontSize="16"/>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="{x:Type DataGrid}" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type ItemsControl}}">
</Style>
<Style x:Key="{x:Type TreeView}" TargetType="{x:Type TreeView}" BasedOn="{StaticResource {x:Type ItemsControl}}">
</Style>
Ответ №2:
Вероятно, в классе есть .Background
свойство. Вы можете создать из него элемент, подобный:
<Button.Background>
<!-- content -->
</Button.Background>
Это позволит вам размещать содержимое внутри него.
Ответ №3:
Также вы можете использовать VisualBrush, если вам нужен более сложный фон. Вы можете создать VisualBrush из любого элемента управления в WPF. Если вам нужна кисть с надписями в сетке, это можно сделать.