gpt4 book ai didi

wpf - XAML/WPF 中的用户控件有什么问题?

转载 作者:行者123 更新时间:2023-12-04 07:10:02 25 4
gpt4 key购买 nike

我在让 UserControls 在 XAML 中工作时遇到了重大问题——我花了几个小时试图找出所有问题,但一无所获,也找不到哪里出错了。
我遇到的主要问题是当我创建一个用户控件时,例如一个简单的用户控件,它显示一个不同颜色的对象 - 我已经成功为此创建了一个属性,并且可以在设计时将颜色分配给这个用户控件并且它可以工作 - 显示绿色,红色等。
但是,当我给这个 UserControl 一个名称以便我可以在运行时分配这个属性时,如果我删除用户控件工作的名称,我会收到一个错误“无法创建类型为 'MyUserControl' 的实例” - 我可以添加任意数量的我想要的设计时间,它们都可以工作,但是一旦我分配了名称或 x:Name,它就会中断,我不知道为什么。
例如,可以创建一个标签,它有一个我可以在代码中引用它的名称——为什么不是我自己的控件——不管多么简单。

我的主要问题是:

  • 为什么给我的 UserControl 一个
    名称或 x:name 阻止它工作?
  • 如何使用多个
    同一类型的用户控件
    window ?
  • 如何访问 Canvas 、标签
    来自内部的 UserControl 等或
    在用户控件之外?
  • 如何在
    运行时还是在代码或 XAML 中的设计时?

  • 我不明白为什么这些应该如此困难 - 我无法弄清楚这个问题,所以请如果有人可以提供帮助,那么谢谢!

    这是我的 UserControl 的 XAML 和代码
    <UserControl x:Class="Device.Draco"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="20" Height="36" x:Name="Icon">
    <Canvas Width="20" Height="36" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Rectangle Height="36" Width="20" Fill="{Binding ElementName=Icon, Path=ZuneColour}" Canvas.Left="0" Canvas.Top="0" RadiusX="1" RadiusY="1">
    <Rectangle.BitmapEffect><OuterGlowBitmapEffect GlowColor="Black" GlowSize="2" /></Rectangle.BitmapEffect>
    </Rectangle>
    <Rectangle Canvas.Left="1" Canvas.Top="1" Height="24" Stroke="#191616" Width="18">
    <Rectangle.Fill>
    <LinearGradientBrush>
    <GradientStop Offset="1" Color="#231F20"/>
    <GradientStop Offset="0" Color="#524F4F"/>
    <LinearGradientBrush.Transform>
    <RotateTransform Angle="68" CenterX="0.5" CenterY="0.5"/>
    </LinearGradientBrush.Transform>
    </LinearGradientBrush>
    </Rectangle.Fill>
    </Rectangle>
    <Rectangle Canvas.Left="5.5" Canvas.Top="25" Height="9" Width="9" RadiusX="3" RadiusY="3">
    <Rectangle.Fill>
    <LinearGradientBrush>
    <GradientStop Offset="0" Color="#66000000"/>
    <GradientStop Offset="1" Color="#22000000"/>
    </LinearGradientBrush>
    </Rectangle.Fill>
    <Rectangle.Stroke>
    <LinearGradientBrush>
    <GradientStop Offset="0" Color="#66FFFFFF"/>
    <GradientStop Offset="1" Color="#22FFFFFF"/>
    </LinearGradientBrush>
    </Rectangle.Stroke>
    </Rectangle>
    </Canvas>

    这是 UserControl 的代码 - 添加了所有样式并填充了简单的 XAML 以消除此原因 - 后面的代码如下:
    Namespace Device
    Partial Public Class Draco
    Inherits System.Windows.Controls.UserControl
    Public Shared ZuneColorProperty As DependencyProperty = _
    DependencyProperty.Register("ZuneColour", GetType(Brush), GetType(Device.Draco))
    Public Property ZuneColour() As Brush
    Get
    Return GetValue(ZuneColorProperty)
    End Get
    Set(ByVal Value As Brush)
    SetValue(ZuneColorProperty, Value)
    End Set
    End Property
    End Class
    End Namespace

    这是我当前如何使用它的示例
    <Window x:Class="Demo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ui="clr-namespace:ZuneCards.Device"
    Title="Demo" Height="300" Width="300" Name="Window1">
    <Grid>
    <ui:Draco ZuneColour="Pink" HorizontalAlignment="Right" Margin="0,113,81,113" Width="20"></ui:Draco>
    </Grid>
    </Window>

    最佳答案

    我不确定是否可以在不查看源代码的情况下解决您的 UserControl 的具体问题。

    但是,我可以回答第 3 部分。如果您为控件模板的一部分命名,则可以从控件代码中检索该部分。如果需要,您可以从那里公开退货。

    <ControlTemplate TargetType="{x:Type l:MyUserControl}">
    <Button x:Name="PART_button">My Button</Button>
    </ControlTemplate>

    [TemplatePart(Name = "PART_button", Type = typeof(Button))]
    public class MyUserControl:UserControl
    {

    public override void OnApplyTemplate()
    {
    base.OnApplyTemplate();

    Button button = (Button)base.GetTemplateChild("PART_button");

    // do something with the button control
    }

    }

    该属性表示该控件需要类型为 Button 的“PART_button”控件。在它的模板中。然后在 OnApplyTemplate方法可以调用 GetTemplateChild检索您需要的部分。

    关于wpf - XAML/WPF 中的用户控件有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506702/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com