Unicode 保留为纯文本而不是显示为图标
Unicode remains as a plain text instead of displaying as an icon
我正在创建一个 C# WPF 应用程序,我在其中以编程方式为存储在 SQLite 数据库中的每个类别创建按钮。每个按钮都包含一个 Font Awesome 图标和文本。
Table
创建按钮
public static void LoadSidePanelButtons(StackPanel stackPanel)
{
DataTable NavigationTable = new DataTable();
string query = "SELECT * FROM Navigation ORDER BY Name ASC";
DatabaseConnection.PopulateDataTable(NavigationTable, query);
foreach (DataRow row in NavigationTable.Rows)
{
ToggleButton toggleButton = new ToggleButton();
toggleButton.Name = "id" + row["navigationID"].ToString();
toggleButton.Content = row["Name"].ToString();
toggleButton.Tag = row["Icon"].ToString();
toggleButton.Style = (Style)stackPanel.Resources["SidePanelButton"];
toggleButton.Click += new RoutedEventHandler(MainWindow.sidePanelButton_onClick);
stackPanel.RegisterName(toggleButton.Name, toggleButton);
stackPanel.Children.Add(toggleButton);
}
}
按钮模板
<StackPanel.Resources>
<Style x:Key="SidePanelButton" TargetType="ToggleButton">
<Setter Property="Height" Value="50" />
<Setter Property="Width" Value="230" />
<Setter Property="Margin" Value="0 0 0 10" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="Border" CornerRadius="3" Background="Transparent">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60" />
<ColumnDefinition Width="170" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock x:Name="Icon" Grid.Column="0" Grid.Row="0" FontSize="18" Foreground="#FF8B939C" FontFamily="{StaticResource FontAwesomeRegular}" HorizontalAlignment="Center" VerticalAlignment="Center">
<ContentPresenter x:Name="IconContent" Content="{TemplateBinding Tag}" />
</TextBlock>
<TextBlock x:Name="Title" Grid.Column="1" Grid.Row="0" FontSize="14" Foreground="#FF8B939C" FontFamily="{StaticResource Roboto}" HorizontalAlignment="Left" VerticalAlignment="Center">
<ContentPresenter x:Name="TitleContent" Content="{TemplateBinding Content}" />
</TextBlock>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" TargetName="Border" Value="#FF19BDD2" />
<Setter Property="Foreground" TargetName="Icon" Value="#FFFFFF" />
<Setter Property="Foreground" TargetName="Title" Value="#FFFFFF" />
<Setter TargetName="spbtBorder" Property="Border.Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="14" Color="Black" Opacity="0.25" ShadowDepth="4" Direction="-90" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="Border" Value="#FF19BDD2" />
<Setter Property="Foreground" TargetName="Icon" Value="#FFFFFF" />
<Setter Property="Foreground" TargetName="Title" Value="#FFFFFF" />
<Setter TargetName="Border" Property="Border.Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="14" Color="Black" Opacity="0.25" ShadowDepth="4" Direction="-90" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
问题是:
toggleButton.Tag = row["Icon"].ToString();
当我用它来添加图标时,按钮将“\uf022”显示为纯文本。
但是...
toggleButton.Tag = "\uf022";
当我把它改成这个时,它显示的图标没有任何问题。
而且我目前找不到为什么从数据库加载到字符串的 unicode 仍然是纯文本,而手动创建的带有 unicode 的字符串显示为图标的原因。
正如@RandRambo 在问题下方的评论中指出的那样,问题在于字符串实际上是 "\uf022"
而不是 "\uf022"
.
他的解决方案 Regex.Unescape(row["Icon"].ToString());
非常有效。
我正在创建一个 C# WPF 应用程序,我在其中以编程方式为存储在 SQLite 数据库中的每个类别创建按钮。每个按钮都包含一个 Font Awesome 图标和文本。
Table
创建按钮
public static void LoadSidePanelButtons(StackPanel stackPanel)
{
DataTable NavigationTable = new DataTable();
string query = "SELECT * FROM Navigation ORDER BY Name ASC";
DatabaseConnection.PopulateDataTable(NavigationTable, query);
foreach (DataRow row in NavigationTable.Rows)
{
ToggleButton toggleButton = new ToggleButton();
toggleButton.Name = "id" + row["navigationID"].ToString();
toggleButton.Content = row["Name"].ToString();
toggleButton.Tag = row["Icon"].ToString();
toggleButton.Style = (Style)stackPanel.Resources["SidePanelButton"];
toggleButton.Click += new RoutedEventHandler(MainWindow.sidePanelButton_onClick);
stackPanel.RegisterName(toggleButton.Name, toggleButton);
stackPanel.Children.Add(toggleButton);
}
}
按钮模板
<StackPanel.Resources>
<Style x:Key="SidePanelButton" TargetType="ToggleButton">
<Setter Property="Height" Value="50" />
<Setter Property="Width" Value="230" />
<Setter Property="Margin" Value="0 0 0 10" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="Border" CornerRadius="3" Background="Transparent">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60" />
<ColumnDefinition Width="170" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock x:Name="Icon" Grid.Column="0" Grid.Row="0" FontSize="18" Foreground="#FF8B939C" FontFamily="{StaticResource FontAwesomeRegular}" HorizontalAlignment="Center" VerticalAlignment="Center">
<ContentPresenter x:Name="IconContent" Content="{TemplateBinding Tag}" />
</TextBlock>
<TextBlock x:Name="Title" Grid.Column="1" Grid.Row="0" FontSize="14" Foreground="#FF8B939C" FontFamily="{StaticResource Roboto}" HorizontalAlignment="Left" VerticalAlignment="Center">
<ContentPresenter x:Name="TitleContent" Content="{TemplateBinding Content}" />
</TextBlock>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" TargetName="Border" Value="#FF19BDD2" />
<Setter Property="Foreground" TargetName="Icon" Value="#FFFFFF" />
<Setter Property="Foreground" TargetName="Title" Value="#FFFFFF" />
<Setter TargetName="spbtBorder" Property="Border.Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="14" Color="Black" Opacity="0.25" ShadowDepth="4" Direction="-90" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="Border" Value="#FF19BDD2" />
<Setter Property="Foreground" TargetName="Icon" Value="#FFFFFF" />
<Setter Property="Foreground" TargetName="Title" Value="#FFFFFF" />
<Setter TargetName="Border" Property="Border.Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="14" Color="Black" Opacity="0.25" ShadowDepth="4" Direction="-90" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
问题是:
toggleButton.Tag = row["Icon"].ToString();
当我用它来添加图标时,按钮将“\uf022”显示为纯文本。
但是...
toggleButton.Tag = "\uf022";
当我把它改成这个时,它显示的图标没有任何问题。
而且我目前找不到为什么从数据库加载到字符串的 unicode 仍然是纯文本,而手动创建的带有 unicode 的字符串显示为图标的原因。
正如@RandRambo 在问题下方的评论中指出的那样,问题在于字符串实际上是 "\uf022"
而不是 "\uf022"
.
他的解决方案 Regex.Unescape(row["Icon"].ToString());
非常有效。