2017-04-17 4 views
0

現在、WPFでcss media/Android layoutのような動作を作成しています。基本的には、画面幅の3つの値(800px、1280px、および1920px)に基づいた解像度のカテゴリがあります。解像度の変更を聞きながらコンバータを使用して半固定サイズのWPFウィンドウを自動的にサイズ変更する

対応する3つのリソースディクショナリには、UI要素のキーを持つInt32の値が含まれています。サンプルエントリは、次のとおり

<sys:Int32 x:Key="initial_screen_width">1600</sys:Int32> 

マイIConverter単に画面解像度レベル(画面幅に基づくもの)をチェックし、対応する解像度の辞書内のキーを返し:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    int dimension = 0; 
    object value2 = value; 
    string resourceId = (string)parameter; 

    if(resourceId is string) 
    { 
     dimension = GetDimension(resourceId, GetResolutionLevel()); 
    } 

    return dimension; 
} 

最後に、I単にコンバータとUserControl属性をバインド:対応する寸法が返されますfine--

<UserControl 
... 
Height="{Binding Converter={StaticResource LayoutDimensionConverter}, ConverterParameter=initial_screen_height}" 
... 
> 

それは完璧に動作します。しかし、解像度の変更を処理する方法(UIを更新して再度調整する方法)を見つけることができないようです。私は

はので、私は静的変数などのシステムパラメータを使用してみましたUpdateTargetは

答えて

0

これは、SystemEvents.DisplaySettingsChangedを使用して行われました。画面の解像度が変更されるたび

 public SomeView() 
     { 
      SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; 
     } 

     private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) 
     { 
      // Refreshes UI 
      var dataContext = DataContext; 
      DataContext = null; 
      DataContext = dataContext; 
     } 

DataContextがリセットされ、すべての値コンバータは再度焼成します。

関連する問題