条件资源创建 WPF XAML 设计/运行时

2023-12-02

继第一个问题之后WPF 级联绑定,

我说我有资源多于预期两者中都定义了主窗口用户控件:

这在Snoop

bindingMCVE snoop view

  • the 主窗口 XAML有一个 MainWindow ViewModel 的“实例”,用于绘制 2 个用户控件green and blue

Test application of 2 UserControls

  • 此外,2 个用户控件中的每一个都有 2 个用户控件视图模型实例,用于绘制内圆red

simple usercontrol

  1. 我的第一个意图用户控制是为了能够看到“live“我的控件是什么样子的(我把它涂成红色,以区分这个“模型”与主窗口中的绿色和蓝色圆圈)
  2. My 资源创建起来非常便宜,所以无论我的应用程序中是否还有 2 个额外的资源,但我预计我的资源会更昂贵......

Finally我的问题是:

如何有条件地让资源在“低级别”控件中创建(以便我可以在控件的视图中进行预览)but在运行完整应用程序(或主窗口的视图)时阻止此创建,因为我将绑定到此上层的资源。

提前谢谢了。

此致。

NGI


我准备了在设计时显示一个数据并在运行时显示后者的简化方法。希望您会发现它有用并根据您的情况进行调整。

XAML:

<Window.Resources>
    <DataTemplate x:Key="DesignModeDataTemplate">
        <TextBlock Text="Design mode"/>
    </DataTemplate>
    <DataTemplate x:Key="RunTimeDataTemplate">
        <TextBlock Text="Run Time"/>
    </DataTemplate>
    <local:IsInDesignModeConverter x:Key="IsInDesignModeConverter"/>
</Window.Resources>
<ContentControl>
    <ContentControl.ContentTemplate>
        <MultiBinding Converter="{StaticResource IsInDesignModeConverter}">
            <Binding Source="{StaticResource DesignModeDataTemplate}"/>
            <Binding Source="{StaticResource RunTimeDataTemplate}"/>
        </MultiBinding>
    </ContentControl.ContentTemplate>
</ContentControl>

转换器:

 class IsInDesignModeConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
            return values[0];
        return values[1];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

因此,它在设计时显示设计模式文本,在运行时显示运行时文本。 在您的情况下,您可以插入已定义的资源,而不是 TextBlock。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

条件资源创建 WPF XAML 设计/运行时 的相关文章

随机推荐