1

メディア タイプを選択するためのコンボボックスがあります。.vmw、.mpeg、または .avi ファイルが選択されたときに、mediaelement の高さを変更したいと思います。MVVMアプローチでこれを達成するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

1

メディア タイプに応じて適切なサイズを選択する適切なコンバーターを使用して、MediaElement のWidthandHeightをそのプロパティに直接バインドできます。Source

<MediaElement
    Width="{Binding Path=Source, RelativeSource={RelativeSource Self}, Converter={StaticResource MediaElementSizeConverter}, ConverterParameter=Width}"
    Height="{Binding Path=Source, RelativeSource={RelativeSource Self}, Converter={StaticResource MediaElementSizeConverter}, ConverterParameter=Height}"/>

コンバーター:

public class MediaElementSizeConverter : IValueConverter
{
    private const double defaultWidth = 320d;
    private const double defaultHeight = 240d;
    private const double wmvWidth = 640d;
    private const double wmvHeight = 480d;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Uri source = value as Uri;

        if (source != null)
        {
            if (source.AbsolutePath.EndsWith(".wmv"))
            {
                return (parameter as string) == "Width" ? wmvWidth : wmvHeight;
            }

            // more media types ...
        }

        return (parameter as string) == "Width" ? defaultWidth : defaultHeight;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-04-12T10:03:06.433 に答える
0

1 つの解決策は、 を自分で作成したクラスComboBoxのリストにバインドすることです。MediaTypeDefinition

public class MediaTypeDefinition
{
    public string Name { get; set; }

    public int Height { get; set; }
}

SelectedItemその後、メディア要素の高さにバインドできます。

<ComboBox x:Name="mediaTypeList" ItemsSource="{Binding Definitions}" SelectedValuePath="Name" />

<MediaElement Height="{Binding SelectedItem.Height, Elementname=mediaTypeList}" />
于 2012-04-12T06:58:31.490 に答える