为了账号安全,请及时绑定邮箱和手机立即绑定

解析代码中的 XAML 样式并加载自定义控件

解析代码中的 XAML 样式并加载自定义控件

C#
Cats萌萌 2021-06-03 15:11:39
我有一个使用 Roslyn 解析 C# 代码的 C++ 程序。我需要将我的样式和自定义控件转换为“代码隐藏”。例如我有一个简单的自定义控件包含一个按钮。XAML 样式:<ResourceDictionary    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="clr-namespace:CUSTOM_LIBRARY_PARSE">    <Style TargetType="{x:Type local:CustomControl1}">        <Setter Property="Template">            <Setter.Value>                <ControlTemplate TargetType="{x:Type local:CustomControl1}">                    <Border Background="{TemplateBinding Background}"                            BorderBrush="{TemplateBinding BorderBrush}"                            BorderThickness="{TemplateBinding BorderThickness}">                        <Button Background="#FF487DF0" >                            <Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center" OpacityMask="#FFC3C3C3" Content="{Binding text_of_button_Value, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:CustomControl1}}}" />                        </Button>                    </Border>                </ControlTemplate>            </Setter.Value>        </Setter>    </Style></ResourceDictionary>代码隐藏控制:using System;using System.Windows;using System.Windows.Controls;namespace CUSTOM_LIBRARY_PARSE{    public class CustomControl1 : Control    {        public static readonly DependencyProperty text_of_button= DependencyProperty.Register("text_of_button_Value",typeof(string),typeof(CustomControl1),new PropertyMetadata(Environment.UserName));        public string text_of_button_Value        {            get { return (string)GetValue(text_of_button); }            set { SetValue(text_of_button, value); }        }        static CustomControl1()        {            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));        }    }}然后用XamlParser解析它并将其加载到customcontrol1那可能吗 ?谢谢
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

答案是 :

  1. 创建自定义控件的公共版本:

    public CustomControl1() { }

  2. 创建自定义控件的公共版本:

    public CustomControl1(){
        ResourceDictionary Parse_Resource = XamlReader.Parse(code_xaml) as ResourceDictionary;    
        this.Resources = Parse_Resource;
        }

解决了:D


查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信