C# 基于文本值更改符号CON

C# 基于文本值更改符号CON,c#,xaml,windows-10,conditional,C#,Xaml,Windows 10,Conditional,需求 我正在一个数据模板中设置这个。。我想做的是,除了一个特殊的例外,每个硬件类型显示一个不同的图标。我将使用的3个不同图标是:;Shop、OutlineStar和其他用户。所有寄存器都有商店图标,所有服务器都有大纲视图,所有显示板都有其他用户图标 例外情况 在某些情况下,寄存器也可以是服务器,因此在这种情况下,我希望将图标切换为Outline Star 代码 <DataTemplate x:Key="ZoomedInTemp"

需求 我正在一个数据模板中设置这个。。我想做的是,除了一个特殊的例外,每个硬件类型显示一个不同的图标。我将使用的3个不同图标是:;Shop、OutlineStar和其他用户。所有寄存器都有商店图标,所有服务器都有大纲视图,所有显示板都有其他用户图标

例外情况 在某些情况下,寄存器也可以是服务器,因此在这种情况下,我希望将图标切换为Outline Star

代码

                <DataTemplate x:Key="ZoomedInTemp"
                          x:DataType="DeviceMenu">
                    <Grid>
                        <StackPanel Orientation="Vertical" Padding="5">
                            <TextBlock Text="{x:Bind FacilityName}" />
                            <StackPanel Orientation="Horizontal">
                                <SymbolIcon Symbol="Shop" Margin="0,5,12,0"/>
                                <TextBlock Text="{x:Bind Hardware}" />
                                <TextBlock Text="{x:Bind HostName}" Margin="10,0,0,0"/>
                            </StackPanel>
                        </StackPanel>
                    </Grid>
                </DataTemplate>    

您可以使用转换器获取所需的符号,并将基于硬件获取符号的逻辑放在转换器中

转换器

public class SymbolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        // value is Hardware
        // Logic to return symbol
        //retun Symbol.OutlineStar
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
XAML来使用这个转换器

<DataTemplate x:Key="ZoomedInTemp"
                      x:DataType="DeviceMenu">
                <Grid>
                    <StackPanel Orientation="Vertical" Padding="5">
                        <TextBlock Text="{x:Bind FacilityName}" />
                        <StackPanel Orientation="Horizontal">
                            <SymbolIcon Symbol="{x:Bind Hardware, Converter={StaticResource SymbolConverter}}" Margin="0,5,12,0"/>
                            <TextBlock Text="{x:Bind Hardware}" />
                            <TextBlock Text="{x:Bind HostName}" Margin="10,0,0,0"/>
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </DataTemplate>    

您必须将此转换器添加到页面/应用程序级资源。 我不确定您需要什么来决定符号,但是,如果您还需要其他东西,那么您可以在ConverterParameter中传递它