기본 클래스 UserControl에서 사용자 지정 컨트롤 (본인)을 만들었으므로 앞으로 컨트롤을 만들 때 상속하지 못하게되었습니다. 나는이 사용자 지정 컨트롤에서 상속 할 때사용자 지정 컨트롤에서 상속
이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;
}
}
}
, 그것은 보인다 내가으로 실행했습니다 문제가된다 : 여기
는 소스 코드를 사용자 정의 컨트롤 템플릿 여기<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>
입니다 내 템플릿을 무시하고 빈 컨트롤로 끝납니다.
다음은이 사용자 지정 컨트롤에서 상속 된 새 컨트롤의 예입니다.
<custom:LoadOverlayUserControl x:Class "ChildControl"
...
...
...>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../ResourceDictionaries/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
...
</Grid>
</custom:LoadOverlayUserControl>
다음은 새 컨트롤을 사용하는 방법입니다. 나는 가독성을 위해 네임 스페이스를 생략했지만, 내가해야 할 일이 까다로운 것이 없다면 네임 스페이스가 정확하다는 것을 확신한다.
<UserControl x:Class "SomeOtherControl">
<Grid>
<StackPanel>
<my:ChildControl />
</StackPanel>
</Grid>
</UserControl>
사용자 지정 컨트롤 뒤에 아이디어는 내가 반투명 불투명도의 상단에 "현재로드"오버레이를 적용 할 수 있도록하려면 컨트롤을위한 것입니다.
[FAQ] –
이 질문에 대한 대답을 쓰려고 생각했지만 그 다음에 나는 –
다음 번에는 질문을 작성하기 전에 게시하지 않도록하십시오. downvotes의 무리를지고. –