【发布时间】:2019-11-08 13:33:29
【问题描述】:
当尝试更改作为 ListBox 的 DataTemplate 一部分的 TextBlock 的背景时,背景仅围绕文本而不是整个块
在 UWP TextBlock 中没有背景属性,所以我将它包裹在边框中并像这样更改边框的背景:
<ListBox x:Name="BitsListView" ItemsSource="{x:Bind BitsList, Mode=TwoWay}" Loaded="BitsListView_Loaded"
HorizontalAlignment="Left" IsEnabled="{x:Bind IsWriteAccess,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="BitsListView_SelectionChanged " SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="BitText" Text="{Binding}" Loaded="BitText_Loaded" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
颜色在 OnLoaded 事件中发生变化,如下所示:
private void BitText_Loaded(object sender, RoutedEventArgs e)
{
TextBlock bitText = sender as TextBlock;
StackPanel sp = bitText.Parent as StackPanel;
Border border = sp.Parent as Border;
if ((int)bitText.DataContext == 1)
{
bitText.Foreground = new SolidColorBrush(Windows.UI.Colors.LightGreen);
border.Background = new SolidColorBrush(Windows.UI.Colors.DarkGreen);
}
else
{
bitText.Foreground = new SolidColorBrush(Windows.UI.Colors.Gray);
border.Background = new SolidColorBrush(Windows.UI.Colors.LightGray);
}
}
但结果是这样的: https://pasteboard.co/IlcZB1J.png
我想要达到的是这样的: (不要介意糟糕的 MSPaint 工作)
https://pasteboard.co/Ild1plp.png
我试图解决这个问题的方法是用边框包裹堆栈面板,但这没有帮助。 然后我尝试包装数据模板,但这是不可能的,进一步爬上树改变背景不能正常工作,显然改变 ListBox 的背景会绘制整个列表,我只需要具有 1 的块完整地绘制,而不仅仅是围绕文本的一点点
【问题讨论】:
标签: c# uwp background listbox textblock