2012-04-12 88 views
1

我有一個用於選擇媒體類型的組合框。當選擇.vmw,.mpeg或.avi文件時,我想要改變mediaelement的高度。我如何用MVVM方法實現這一點?根據選擇的組合框更改元素高度

在此先感謝

+0

您是否想在MediaElement打開不同的Source時更改高度? – Clemens 2012-04-12 07:05:56

+0

是的,但這個來源是從組合框中選擇 – bilgestackoverflow 2012-04-12 07:33:16

回答

0

一個解決辦法是到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}" /> 
+0

謝謝,我會嘗試這個 – bilgestackoverflow 2012-04-12 07:33:51

1

您可以在MediaElement的WidthHeight直接綁定到其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(); 
    } 
} 
+0

感謝的確,它似乎很有用。我會嘗試 – bilgestackoverflow 2012-04-12 10:26:43

+0

當我應用您提供的解決方案時,我想問一個問題。轉換器工作,但源始終爲空。你能幫忙解決這個問題嗎?在此先感謝 – bilgestackoverflow 2012-04-12 12:05:18

+0

你如何設置來源?我假設它綁定到組合框的SelectedItem。 – Clemens 2012-04-12 12:09:43

相關問題