【发布时间】:2021-12-30 16:51:46
【问题描述】:
当超链接按钮控件作为项目添加到列表视图时,我试图解决它的问题。
当项目没有被选中时控件显示得很好(默认前景是黑色),但是一旦列表视图项目被选中,它的内容背景就会变成深蓝色,使得里面的任何黑色文本都很难阅读,出于这个原因,列表视图项内的任何文本块控件,其前景属性(文本颜色)自动更改为白色(这是默认系统行为),问题是,同样的事情不会发生在里面的超链接按钮那说列表视图项。
请注意,超链接按钮在没有像文本块一样被选中时具有透明背景,但前景色始终保持黑色,无论是否选择了包含它的列表视图项。
为了克服这个问题,我尝试在超链接按钮内容中创建一个文本块以显示文本并将其前景属性绑定到列表视图项内的另一个文本块,默认情况下会正确更改其前景,但绑定似乎不起作用,它只设置一次值,然后不再更新,无论何时选择或取消选择列表视图项,绑定都不会反映源代码管理前景属性的当前前景值。
我在下面为您提供了一个示例代码来重现我的问题。
<ListView x:Name="Employees_List_View" BorderThickness="1" BorderBrush="{ThemeResource SystemControlForegroundBaseMediumLowBrush}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
SelectionMode="Extended" ItemsSource="{x:Bind contact_data_model.contacts}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="50" Margin="0 7 0 7">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<TextBlock FontWeight="Bold" FontSize="16" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Name}"></TextBlock>
<TextBlock x:Name="TelelphoneNumberTextBlock" FontSize="12" Grid.Row="1" Grid.Column="1" Text="{Binding TelephoneNumber}" VerticalAlignment="Center"/>
<HyperlinkButton VerticalAlignment="Center" HorizontalAlignment="Center" Click="HyperlinkButton_Click" FontSize="12" Grid.Row="1" Grid.Column="2">
<TextBlock Opacity="1" Foreground="{Binding Foreground, ElementName=TelelphoneNumberTextBlock, Mode=OneWay}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="12" Grid.Row="1" Grid.Column="2" Text="{Binding EmailInfo}"/>
</HyperlinkButton>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的问题可能很容易解决,但我搜索了很多,但没有成功找到解决这个特定问题的方法。
我能想出的摆脱这种情况的唯一方法是将其位于超链接按钮不透明度内的文本块设置为 0(因此超链接按钮自动调整大小仍按预期工作)并在按钮顶部创建一个新文本块与按钮本身相同的文本和位置,例如:
...
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="12" Grid.Row="1" Grid.Column="2" Text="{Binding EmailInfo}"/>
<HyperlinkButton VerticalAlignment="Center" HorizontalAlignment="Center" Click="HyperlinkButton_Click" FontSize="12" Grid.Row="1" Grid.Column="2">
<TextBlock Opacity="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="12" Grid.Row="1" Grid.Column="2" Text="{Binding EmailInfo}"/>
</HyperlinkButton>
...
这个解决方案是丑陋和骇人听闻的。 我很肯定这个问题有一个更优雅的解决方案,但我搜索的所有内容都没有触及这个非常具体的问题,而且我的 xaml 知识非常有限。
针对此问题的正确 XAML 解决方案是什么?
【问题讨论】: