Tôi muốn nói với WPF: "Nếu TextBlock không chứa dữ liệu, sau đó không thấy nó."Làm thế nào bạn có thể lấy một XAML TextBlock để thu gọn khi nó không chứa dữ liệu?
TRY # 1 với một đơn giản kích hoạt tạo ra lỗi "viên 'Text' là không hợp lệ vì nó không có một tên loại vòng loại ":.
<StackPanel Margin="10">
<TextBlock Padding="10" Background="Yellow" Text="{Binding MainMessage}">
<TextBlock.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</TextBlock.Triggers>
</TextBlock>
</StackPanel>
TRY # 2 với một phong cách kích hoạt sản xuất t ông lỗi Loại 'phong cách' không chứa một lớp công chúng kiểu chuyển đổi:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="MainMessageStyle" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
TRY # 3 với một phong cách DataTrigger tạo ra lỗi tương tự Loại 'phong cách' không chứa public class type-chuyển đổi:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<DataTrigger Binding="{Binding MainMessage}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="MainMessageStyle" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
TRY # 4: OK, đó là một sự giám sát câm của tôi, quên StaticResource, nhưng thậm chí sau đó cả Hãy thử # 2 và # 3 Hãy thử nhận được một lỗi mới Loại System.Windows.Trigger trong Phong cách không rõ:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="{StaticResource MainMessageStyle}" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
Vậy làm thế nào để tôi làm điều này?
ĐÁP:
OK, vì vậy đó là một săn cú pháp điên với một kết thúc hạnh phúc, đây là phiên bản làm việc, hy vọng nó sẽ giúp ai đó, bài học kinh nghiệm:
- nếu kích hoạt, sau đó phong cách
- nếu phong cách, sau đó StaticResource
- nếu ràng buộc, sau đó DataTrigger
mã mà hoạt động:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding MainMessage}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<ItemsControl
ItemsSource="{Binding DataTypeViews}"/>
<TextBlock Style="{StaticResource MainMessageStyle}" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
ugh. tại sao wpf quá khủng khiếp? – PeterAllenWebb
Không có lý do gì cho nhóm WPF vì lý do tại sao # 4 không chỉ hoạt động! Tại sao WPF quá khó hiểu? –