继第一个问题之后WPF 级联绑定,
我说我有资源多于预期两者中都定义了主窗口和用户控件:
这在Snoop
![bindingMCVE snoop view](https://i.stack.imgur.com/UmfIz.jpg)
- the 主窗口 XAML有一个 MainWindow ViewModel 的“实例”,用于绘制 2 个用户控件green and blue
![Test application of 2 UserControls](https://i.stack.imgur.com/hBnz3.png)
- 此外,2 个用户控件中的每一个都有 2 个用户控件视图模型实例,用于绘制内圆red
![simple usercontrol](https://i.stack.imgur.com/ZlC62.jpg)
- 我的第一个意图用户控制是为了能够看到“live“我的控件是什么样子的(我把它涂成红色,以区分这个“模型”与主窗口中的绿色和蓝色圆圈)
- 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(使用前将#替换为@)