如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

ThisHandleNotInUse

我正在尝试使用XAML解析器引用LinearGradientBrush,但它无法识别该对象,并且出现异常:

“无法创建未知类型'LinearGradientBrush'”

是否可以在运行时识别此类型?

这是我正在使用的代码:

public static class CustomBrushes
{
    public static Brush LinGrad_Bevel()
    {
        
        
        StringReader sr = new StringReader(@"<LinearGradientBrush EndPoint='0.5,1' MappingMode='RelativeToBoundingBox' StartPoint='0.5,0'>
                <GradientStop Color='#00F7F7F7' Offset='0'/>
                <GradientStop Offset='1'/>
                <GradientStop Color='Black' Offset='0.741'/>
                <GradientStop Color='Black' Offset='0.75'/>
                <GradientStop Color='White' Offset='0.25'/>
            </LinearGradientBrush>");
        XmlReader xr = XmlReader.Create(sr);


        return (Brush)XamlReader.Load(xr);
    }
}

我真的不喜欢用XAML编程(特别是因为我所做的大部分工作都是依赖于运行时程序流进行设计的,但是某些对象比C#更加容易在其中进行原型设计,所以我更希望能够使用此方法...

我读过我应该在某处包含这样的行,但是老实说,我不明白为什么,如果我把它放在所有“用法”下,它似乎也行不通

[assembly: XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation" , "System.Windows.Media")]

无论如何,对于C#代码文件中XAML的运行时解析的任何帮助将不胜感激。

彼得·杜尼奥

为了回答您的特定问题,在编译XAML时需要提供名称空间声明。最简单的方法是将它们插入您的字符串中。例如:

StringReader sr = new StringReader(@"
    <LinearGradientBrush
        xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
        xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
        EndPoint='0.5,1' MappingMode='RelativeToBoundingBox' StartPoint='0.5,0'>
    <GradientStop Color='#00F7F7F7' Offset='0'/>
    <GradientStop Offset='1'/>
    <GradientStop Color='Black' Offset='0.741'/>
    <GradientStop Color='Black' Offset='0.75'/>
    <GradientStop Color='White' Offset='0.25'/>
</LinearGradientBrush>");
XmlReader xr = XmlReader.Create(sr);

return (Brush)XamlReader.Load(xr);

现在,也就是说,我认为以上是实现此目的的最不优选的方法。如果您想要一个可重用的Brush对象,并且想要使用XAML声明它而不是通过实际的WPF编程API进行声明,那么我认为一种更好的方法是将声明放入Resources程序的相关集合之一中。

例如,如果您希望能够在整个程序中的多个不同窗口中使用它,则可以通过将其放入App.xaml文件中来使其成为全局资源

<Application x:Class="TestSO28999367XamlReader.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
  <Application.Resources>
    <LinearGradientBrush x:Key="beveledLinearGradientBrush"
                    EndPoint='0.5,1' MappingMode='RelativeToBoundingBox' StartPoint='0.5,0'>
      <GradientStop Color='#00F7F7F7' Offset='0'/>
      <GradientStop Offset='1'/>
      <GradientStop Color='Black' Offset='0.741'/>
      <GradientStop Color='Black' Offset='0.75'/>
      <GradientStop Color='White' Offset='0.25'/>
    </LinearGradientBrush>
  </Application.Resources>
</Application>

如果您的使用仅限于一个Window对象或什至是该对象的某个子元素,则可以在该Resources对象集合中添加声明,而不是将其放入中App.xaml

无论如何,您都可以使用以下表达式访问它:

(Brush)FindResource("beveledLinearGradientBrush")

当然,您可以随心所欲地为该资源创建密钥……它不一定必须如此beveledLinearGradientBrush

通过使用上面的C#表达式来检索对象,您仍然可以使用它来初始化一些代码隐藏资源。但是,请注意,以上述方式进行操作时,通过表达式,画笔也可以直接在任何XAML中使用"{StaticResource beveledLinearGradientBrush}"

例如:

<Border Background="{StaticResource beveledLinearGradientBrush}"/>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

来自分类Dev

如何在代码中创建自定义UIButton并在xib中使用它?

来自分类Dev

Xamarin.Forms:如何在 C# 代码中使用自定义字体

来自分类Dev

如何在C#中创建用于描述对象的自定义语法?

来自分类Dev

如何在C#中创建用于描述对象的自定义语法?

来自分类Dev

如何在C#中创建自定义事件

来自分类Dev

如何在(C#)中创建自定义光标

来自分类Dev

如何在C#中创建自定义事件

来自分类Dev

如何在Java Web App中创建自定义标签?如何在JSP中使用自定义标签?

来自分类Dev

如何在Java Web App中创建自定义标签?如何在JSP中使用自定义标签?

来自分类Dev

如何在文档注释中使用自定义链接文本创建代码引用?

来自分类Dev

如何在此代码中使用自定义函数?

来自分类Dev

如何在自定义对象的android中使用ArrayAdapter

来自分类Dev

如何在torchscript中使用自定义python对象

来自分类Dev

如何在不使用WPF的情况下在Silverlight 5中使用generic.xaml创建自定义控件?

来自分类Dev

如何在javascript中创建自定义对象?

来自分类Dev

如何使用自定义代码在Magento中创建?

来自分类Dev

如何在Sublime Text 2 for Linux中创建和使用自定义代码段?

来自分类Dev

在 C# 中使用反射访问对象中的自定义属性及其值

来自分类Dev

如何在wxPython中使用自定义热点创建自定义光标?

来自分类Dev

如何在MVC中使用自定义路由创建自定义URL

来自分类Dev

C#:如何使用iText 7创建自定义大小的Document对象?

来自分类Dev

如何在CSS3中使用伪类创建自定义形状

来自分类Dev

如何在Vue 3中使用Typescript创建全局自定义指令

来自分类Dev

如何在Liferay 5.2.3中使用钩子创建自定义登录操作

来自分类Dev

如何在C ++中使用自定义比较器创建std :: set?

来自分类Dev

如何在Android中创建和使用自托管对象共享自定义故事?

来自分类Dev

如何在 C# 中使用自定义域名获取当前 PathName?

来自分类Dev

如何在 c# WPF 中为自定义形状对象设置动画

Related 相关文章

  1. 1

    如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

  2. 2

    如何在代码中创建自定义UIButton并在xib中使用它?

  3. 3

    Xamarin.Forms:如何在 C# 代码中使用自定义字体

  4. 4

    如何在C#中创建用于描述对象的自定义语法?

  5. 5

    如何在C#中创建用于描述对象的自定义语法?

  6. 6

    如何在C#中创建自定义事件

  7. 7

    如何在(C#)中创建自定义光标

  8. 8

    如何在C#中创建自定义事件

  9. 9

    如何在Java Web App中创建自定义标签?如何在JSP中使用自定义标签?

  10. 10

    如何在Java Web App中创建自定义标签?如何在JSP中使用自定义标签?

  11. 11

    如何在文档注释中使用自定义链接文本创建代码引用?

  12. 12

    如何在此代码中使用自定义函数?

  13. 13

    如何在自定义对象的android中使用ArrayAdapter

  14. 14

    如何在torchscript中使用自定义python对象

  15. 15

    如何在不使用WPF的情况下在Silverlight 5中使用generic.xaml创建自定义控件?

  16. 16

    如何在javascript中创建自定义对象?

  17. 17

    如何使用自定义代码在Magento中创建?

  18. 18

    如何在Sublime Text 2 for Linux中创建和使用自定义代码段?

  19. 19

    在 C# 中使用反射访问对象中的自定义属性及其值

  20. 20

    如何在wxPython中使用自定义热点创建自定义光标?

  21. 21

    如何在MVC中使用自定义路由创建自定义URL

  22. 22

    C#:如何使用iText 7创建自定义大小的Document对象?

  23. 23

    如何在CSS3中使用伪类创建自定义形状

  24. 24

    如何在Vue 3中使用Typescript创建全局自定义指令

  25. 25

    如何在Liferay 5.2.3中使用钩子创建自定义登录操作

  26. 26

    如何在C ++中使用自定义比较器创建std :: set?

  27. 27

    如何在Android中创建和使用自托管对象共享自定义故事?

  28. 28

    如何在 C# 中使用自定义域名获取当前 PathName?

  29. 29

    如何在 c# WPF 中为自定义形状对象设置动画

热门标签

归档