【问题标题】:Bind Icon depending on Enum in WPF Treeview根据 WPF Treeview 中的枚举绑定图标
【发布时间】:2010-05-07 07:01:17
【问题描述】:

我有treeview TextBox,我想转换我的枚举:

<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=AcceptationStatusGlobalFlag}" />

public enum AcceptationStatusGlobalFlag
    {
        NotReady = 0,
        Ready = 1,
        AcceptedByAdmin=2
    }

到图标。会有 3 个图标,比如说 ready.jpg、notready.jpg 和 AcceptedByAdmin.jpg

国家和地区有池 AcceptationStatusGlobalFlag 并且我想在两者上显示这个枚举/图标

            <TreeView Name="structureTree" SelectedItemChanged="structureTree_SelectedItemChanged" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding}" Height="413" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Visible" Width="Auto" PreviewMouseRightButtonUp="structureTree_PreviewMouseRightButtonUp" FontFamily="Verdana" FontSize="12">
                <TreeView.Resources>
                    <HierarchicalDataTemplate DataType="{x:Type ServiceMy:Country}" 
                              ItemsSource="{Binding Path=ListOfRegions}">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" H:"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=NumberOfHotels}"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" "/>
                            <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" FG:"/>
                            <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=AcceptationStatusGlobalFlag}" />
                <!--<Button Name="BTNAddRegion" Height="20" Content="+" Click="BTNAddRegion_Click"></Button>-->
            </StackPanel>
                    </HierarchicalDataTemplate>
                    <HierarchicalDataTemplate DataType="{x:Type ServiceMy:Region}" 
                              ItemsSource="{Binding Path=ListOfProvinces}">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" H:"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=NumberOfHotels}"/>
                <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" "/>
                <!--<Button Name="BTNAddProvince" Height="20" Content="+" Click="BTNAddProvince_Click"></Button>-->
            </StackPanel>


                    </DataTemplate>

                </TreeView.Resources>
            </TreeView>
        </GroupBox>

    </StackPanel>
</Grid>

【问题讨论】:

标签: c# wpf


【解决方案1】:

创建一个Value Converter

它获取您的枚举值并返回相应图标的文件名。

[ValueConversion(typeof(AcceptationStatusGlobalFlag), typeof(string))]
public class AcceptationStatusGlobalFlagToIconFilenameConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        switch ((AcceptationStatusGlobalFlag)value)
        {
            case AcceptationStatusGlobalFlag.Ready:
                return "ready.jpg";
            case AcceptationStatusGlobalFlag.NotReady:
                return "notready.jpg";
            case AcceptationStatusGlobalFlag.AcceptedByAdmin:
                return "AcceptedByAdmin.jpg";
            default:
                return null;
        }

        // or
        return Enum.GetName(typeof(AcceptationStatusGlobalFlag), value) + ".jpg";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

您需要在 XAML 中添加对此转换器的引用

<Window ... xmlns:converters="clr-namespace:App.Converters" ...>
    <Window.Resources>
        <converters:AcceptationStatusGlobalFlagToIconFilenameConverter x:Key="IconConverter"/>
    </Window.Resources>

替换你的文本块

<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=AcceptationStatusGlobalFlag}" />

带有图像并告诉它使用您的转换器

<Image Source="{Binding AcceptationStatusGlobalFlag, Converter={StaticResource IconConverter}}"/>

【讨论】:

  • 如果图形是在 XAML 资源中定义的可缩放形状,而不是文件中的位图,该怎么办?
  • @Anthony 你应该创建一个新问题。
【解决方案2】:

对此最简单的解决方案是使用值转换器;所以创建一个 IValueConverter 实现,将您的枚举转换为相应的图像。

有关详细信息,请参阅: http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

【讨论】:

    【解决方案3】:

    您应该使用带有值转换器的绑定:http://blogs.msdn.com/bencon/archive/2006/05/10/594886.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      相关资源
      最近更新 更多