【问题标题】:How to make loose Xaml content aware of custom controls如何让松散的 Xaml 内容了解自定义控件
【发布时间】:2010-11-23 05:46:29
【问题描述】:

我有一个松散的 XAML 文件...

<Style
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyNamespace"
    TargetType="{x:Type local:CustomControl}">
    <Setter Property="HoverOpacity" Value="1.0"/>
</Style>

... 我想在运行时加载。当我这样做时,我得到一个异常说明,“类型引用找不到名为 'CustomControl' 的公共类型。”如何让松散的 XAML 了解我的命名空间?

我需要使用HoverOpacity,它是CustomControl 的依赖属性。这是我目前用来加载 XAML 的代码:

var resource = Application.GetResourceStream(new Uri("pack://application:,,,/Assets/HoverStyle.xaml"));

XamlReader.Load(resource.Stream);

顺便说一句,我意识到 XAML 很简单,我可以在代码中插入 Style,但这是一个 hello world XAML;它会变得更加复杂,涉及动画等。

附:另一种解决方案是将 XAML 文件附加到从 Panel 派生的自定义控件(不会使 Visual Studio 2008 崩溃的控件)或轻松附加触发器、数据触发器、进入操作和退出操作的方法自定义控件。

【问题讨论】:

    标签: wpf custom-controls xamlreader


    【解决方案1】:

    天哪,我想通了。我需要用命名空间指定程序集名称;像这样:

    <Style
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyNamespace;assembly=MyAssembly"
        TargetType="{x:Type local:CustomControl}">
        <Setter Property="HoverOpacity" Value="1.0"/>
    </Style>
    

    我会将答案归功于任何可以回答我的“P.S.”的人在接下来的两天内提问。整个情况似乎有点潮湿,所以我真的对替代品很感兴趣。

    谢谢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2015-04-27
      • 2013-03-29
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多