gpt4 book ai didi

c# - 从自定义控件继承

转载 作者:行者123 更新时间:2023-11-30 17:07:55 24 4
gpt4 key购买 nike

我已经从基类 UserControl 创建了一个自定义控件(我的第一个),现在我不想在制作 future 的控件时能够从它继承。

这里是自定义控件模板

<Style TargetType="{x:Type local:LoadOverlayUserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:LoadOverlayUserControl}">
<Grid>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"/>
<Border Visibility="{TemplateBinding OverlayVisibility}"
Background="{TemplateBinding OverlayColor}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<dxe:ProgressBarEdit />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

这是源代码:

    public class LoadOverlayUserControl : UserControl
{
static LoadOverlayUserControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(LoadOverlayUserControl), new FrameworkPropertyMetadata(typeof(LoadOverlayUserControl)));
}

#region Overlay Visibility
public static readonly DependencyProperty OverlayVisibilityProperty = DependencyProperty.Register("OverlayVisibility",
typeof(Visibility),
typeof(LoadOverlayUserControl),
new PropertyMetadata(Visibility.Hidden));

private Visibility OverlayVisibility
{
get
{
return (Visibility)this.GetValue(OverlayVisibilityProperty);
}
set
{
this.SetValue(OverlayVisibilityProperty, value);
}
}
#endregion

#region Overlay Color
public static readonly DependencyProperty OverlayColorProperty = DependencyProperty.Register("OverlayColor",
typeof(Color),
typeof(LoadOverlayUserControl),
new PropertyMetadata(Color.FromRgb(0,0,0)));

public Color OverlayColor
{
get
{
return (Color)this.GetValue(OverlayColorProperty);
}
set
{
this.SetValue(OverlayColorProperty, value);
}
}
#endregion

public void SetLoading(bool IsLoading)
{
if (IsLoading)
{
OverlayVisibility = System.Windows.Visibility.Visible;
}
else
{
OverlayVisibility = System.Windows.Visibility.Hidden;
}
}
}

我遇到的问题是,当我从这个自定义控件继承时,它似乎忽略了我的模板,我最终得到一个空控件。

下面是从该自定义控件继承的新控件的示例。

<custom:LoadOverlayUserControl x:Class "ChildControl"
...
...
...>

<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../ResourceDictionaries/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

<Grid>
...
</Grid>
</custom:LoadOverlayUserControl>

下面是我使用新控件的方式。为了便于阅读,我省略了 namespace ,但我向您保证它们是正确的,除非我需要做一些棘手的事情。

<UserControl x:Class "SomeOtherControl">
<Grid>
<StackPanel>
<my:ChildControl />
</StackPanel>
</Grid>
</UserControl>

自定义控件背后的想法是我希望能够在具有半透明不透明度的顶部应用“当前正在加载”覆盖的控件。

最佳答案

当您想在 WPF 中创建自定义控件时,您需要做一些不同的事情。

首先,继承自ContentControl,而不是UserControl

其次,您的资源字典 Generic.xaml 应该放在 Themes 文件夹下。

第三,您的派生控件类也需要是 WPF 控件。也就是说,他们需要覆盖默认样式键,并在 Generic.xaml 中定义他们的样式。

关于c# - 从自定义控件继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137517/

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