11

ResourceKey と Caption を持つ List 値があります。これらの値は両方とも文字列です。Resource は、リソース ディクショナリで定義された実際のリソースの名前です。これらの ResourceKey アイコンはそれぞれ Canvas のものです。

<Data ResourceKey="IconCalendar" Caption="Calendar"/>
<Data ResourceKey="IconEmail" Caption="Email"/>

次に、ボタンとボタンの下にテキストキャプションを持つデータテンプレートを持つリストビューがあります。私がやりたいことは、リソースの静的リソースをボタンのコンテンツとして表示することです。

<ListView.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <Button Content="{Binding ResourceKey}" Template="{StaticResource  RoundButtonControlTemplate}"/>
            <TextBlock Grid.Row="1" Margin="0,10,0,0" Text="{Binding Caption}" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" />
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

staticresource などをバインドしてすべての順列を試したと思います。

私は代替手段を受け入れています。画像を用意してソースプロパティを設定する方が簡単かもしれないことを知っています。

ありがとう

4

2 に答える 2

15

少し考えた後、私は次のValueConvertorようなものを使用することになりました:

class StaticResourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var resourceKey = (string)value;

        return Application.Current.Resources[resourceKey];
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

ボタンのバインディングは

<Button Content="{Binding ResourceKey, Converter={StaticResource resourceConverter}}" />
于 2009-03-29T23:58:22.863 に答える