メディア タイプを選択するためのコンボボックスがあります。.vmw、.mpeg、または .avi ファイルが選択されたときに、mediaelement の高さを変更したいと思います。MVVMアプローチでこれを達成するにはどうすればよいですか?
前もって感謝します
メディア タイプに応じて適切なサイズを選択する適切なコンバーターを使用して、MediaElement のWidth
andHeight
をそのプロパティに直接バインドできます。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();
}
}
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}" />