【发布时间】:2017-01-18 16:56:01
【问题描述】:
我有以下 XAML
但是,当用户框单击列表视图中的任何文本块时,我希望文本的前景色保持不变(当前更改为白色) 相反,我希望更改边框颜色 我该怎么做?
ListView x:Name="LV" ItemsSource= "{Binding Lggv}" SelectionChanged="dataGridData_SelectionChanged" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel >
<Border BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding Info }" AllowDrop="True" >
<TextBlock.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFCEE6C6" Offset="0.008"/>
<GradientStop Color="#FF9ECF8C" Offset="0.987"/>
</LinearGradientBrush>
</TextBlock.Background>
</TextBlock>
</Border>
<Grid >
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFC5DDFF" Offset="0"/>
<GradientStop Color="#FFA8C8F7" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding DateTime}" ></TextBlock>
</Border>
<Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding ComPort}"></TextBlock>
</Border>
<Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding Data}" ></TextBlock>
</Border>
</Grid>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
【问题讨论】:
-
嗯,最简单的方法是更改 xaml.cs 中的视觉状态 - 只需在 MouseClick 上将处理程序添加到 StackPanel 并命名所有必要的元素。比在处理程序中使用 VisualTree 找到这些元素并更改所需的参数。
-
我真的不认为这是在 WPF 中完成的方式,您的方式是 WinForm 方式(IMO)。更清洁的解决方案是使用
Triggers和Styles。这是一个很好的例子:stackoverflow.com/questions/2388429/… 或这个:stackoverflow.com/questions/25414686/…
标签: c# wpf xaml listview textblock