3

データテンプレート内に画像があります。条件によって高さや幅を変えたい。どうすればそれを達成できますか?

私が持っているXAMLコード:

    <ListBox x:Name="options_stack" HorizontalAlignment="Left" Margin="198,569,0,33" Width="603" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollMode="Auto" Height="123" Style="{StaticResource ListBoxStyle}" ItemContainerStyle="{StaticResource ListBoxItemStyle}" >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Image x:Name="options_image" Source ="{Binding}" Stretch="Fill" Width="123" Height="123" MaxHeight="123" MaxWidth="123" Tapped="apply_accessory"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
4

1 に答える 1

3

オプション1

ソース プロパティをバインドしているので、(DataContext として使用する) データ構造を作成してSourceWidthHeightプロパティを保持し、それらをバインドします。

<Image x:Name="options_image"
       Source ="{Binding Source}"
       Width="{Binding Width}" Height="{Binding Height}"
       MaxWidth="{Binding Width}" MaxHeight="{Binding Height}"
       Stretch="Fill" Tapped="apply_accessory"/>

オプション 2

もう 1 つのオプションは、特定の条件が満たされたときに適用する別のDataTemplatesDataTemplateSelectorを作成することです。

DataTemplateSelector 参照: http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

オプション 3

上記の両方のオプションが気に入らない場合は、別の方法があります。私の最後の仕事(Taskin、見たい場合は、プロフィールのリンクを参照してください) では、さまざまなListViewItems. Task色を保持するため、またはこれTemplateSelectorだけのために、モデルに新しいプロパティを作成したくありませんでした。そこでIValueConverter、既存のPriorityオブジェクト プロパティを使用してその色を返すシンプルな代わりに作成しました。次に、次のようにバインドしました。

<Border Background="{Binding Priority, Converter={StaticResource priorityToColorConverter}}"/>

XAML は、必要なものを実装するためのさまざまな方法を提供します。直面している問題を解決するための最善かつ最もクリーンな方法を選択するのは、ユーザー次第です。

于 2013-04-30T13:05:49.573 に答える