我有一個為具有特定解析度的 LCD 顯示幕制作的 WPF 應用程式。WPF 應用程式是固定大小的。視圖通過DataTemplates 系結到它的視圖模型,如下所示:
<DataTemplate DataType="{x:Type vm:IdleViewModel}">
<v:IdleView/>
</DataTemplate>
現在我想讓這個應用程式可用于第二種 LCD 顯示幕型別。觀點會完全不同。有沒有辦法根據解析度將視圖模型系結到不同的視圖?
uj5u.com熱心網友回復:
根據您的要求,有不止一種方法可以做到這一點。讓我專注于可能對您有用的兩種不同方法。如何找出螢屏解析度是另一個主題,請參閱:
- 如何在 WPF 中獲取當前螢屏的大小?
資料模板選擇器
您可以創建一個回傳DataTemplate基于螢屏解析度的資料模板選擇器。確定螢屏解析度的機制取自上述問題。
public class ResolutionDependentTemplateSelector : DataTemplateSelector
{
public DataTemplate InvalidResolutionTemplate { get; set; }
public DataTemplate Resolution1Template { get; set; }
public DataTemplate Resolution2Template { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (IsTargetResolution(480, 576))
return Resolution1Template;
if (IsTargetResolution(720, 480))
return Resolution2Template;
return InvalidResolutionTemplate;
}
private bool IsTargetResolution(double width, double height)
{
return Math.Abs(SystemParameters.PrimaryScreenWidth - width) < 1 &&
Math.Abs(SystemParameters.PrimaryScreenHeight - height) < 1;
}
}
您可以在 XAML 中分配此選擇器。由于我不知道您使用的是哪個控制元件,因此本示例使用了一個簡單的ContentControl. 分配給它的屬性可能會有所不同。
<ContentControl>
<ContentControl.Resources>
<DataTemplate x:Key="Resolution1Template">
<!-- ...your markup. -->
</DataTemplate>
<DataTemplate x:Key="Resolution2Template">
<!-- ...your markup. -->
</DataTemplate>
</ContentControl.Resources>
<ContentControl.ContentTemplateSelector>
<local:ResolutionDependentTemplateSelector Resolution1Template="{StaticResource Resolution1Template}"
Resolution2Template="{StaticResource Resolution2Template}"/>
</ContentControl.ContentTemplateSelector>
</ContentControl>
資源字典
您可以創建單獨的資源字典,其中包含每個不同螢屏的資料模板以及僅適用于特定螢屏大小的其他特定資源。然后在啟動時(例如在AppsOnStartup方法中),將適合螢屏解析度的資源字典合并到應用程式資源中(App.Resources)。
根據應用程式的大小和復雜性,您可以將每個不同螢屏解析度的控制元件分離到自己的專案中,類似于資源字典方法。如果應用程式總是在特定的 LCD 型別上運行,而從不在另一個上運行,那么也可以為每個型別創建目標,因此每個“平臺”只包含它需要的資源。
uj5u.com熱心網友回復:
有沒有辦法根據解析度將視圖模型系結到不同的視圖?
不使用單個視圖模型型別和一個對應的DataTemplate單獨。
你也可以
- 使用兩種不同的視圖模型型別和視圖
- 根據視圖模型實作視圖以采用自身(然后應該知道當前的螢屏解析度)
- 使用DataTemplateSelector根據某些邏輯選擇適當的視圖,而不僅僅是視圖模型的型別
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506317.html
