Вопрос задавался ранее, но я не нашел удовлетворительного ответа. Скажем, у вас есть UserControl
как это:
<UserControl x:Class="TestShowUserControl.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TestShowUserControl"
mc:Ignorable="d"
d:DesignHeight="40" d:DesignWidth="200">
<d:DesignerProperties.DesignStyle>
<Style TargetType="UserControl">
<Setter Property="Background" Value="White"/>
</Style>
</d:DesignerProperties.DesignStyle>
<DockPanel>
<Label x:Name="lblCaption" DockPanel.Dock="Left" Content="Caption"/>
<TextBox Text="Hi there"/>
</DockPanel>
Элемент управления Label
выставляется через DependencyProperty
как это:
public partial class UserControl1 : UserControl
{
#region DependencyProperties
public static readonly DependencyProperty MyCaptionControlProperty = DependencyProperty
.Register(nameof(MyCaptionControl),
typeof(Label),
typeof(UserControl1),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
#endregion
#region Properties
public Label MyCaptionControl
{
get { return (Label)GetValue(MyCaptionControlProperty); }
set { SetValue(MyCaptionControlProperty, value); }
}
#endregion
public UserControl1()
{
InitializeComponent();
MyCaptionControl = lblCaption;
}
}
Как Могу ли я сделать следующее:
<local:UserControl1 MyCaptionControl.Visibility="Collapsed"/>
Если это невозможно, есть ли другой способ сделать это в XAML? Обратите внимание, что я хочу использовать Метку, как если бы я сам объявил ее локально и чтобы я мог при необходимости привязывать ее содержимое к ViewModel. Тем не менее, необходимость разоблачения Style
может быть альтернативой, а лучшее решение невозможно.