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

我有一个使用 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


那可能吗 ?谢谢


Cats萌萌
浏览 147回答 1
1回答

慕无忌1623718

答案是 :创建自定义控件的公共版本:public CustomControl1() { }创建自定义控件的公共版本:public&nbsp;CustomControl1(){ &nbsp;&nbsp;&nbsp;&nbsp;ResourceDictionary&nbsp;Parse_Resource&nbsp;=&nbsp;XamlReader.Parse(code_xaml)&nbsp;as&nbsp;ResourceDictionary;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;this.Resources&nbsp;=&nbsp;Parse_Resource; &nbsp;&nbsp;&nbsp;&nbsp;}解决了:D
打开App,查看更多内容
随时随地看视频慕课网APP