Допустим, у меня есть пользовательский элемент управления, например:
<UserControl
x:Class = "WPFUserControl.MyUserControl"
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"
mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "300">
<StackPanel Orientation = "Horizontal">
<TextBox x:Name = "txtName" />
<Button
x:Name = "btnClickMe"
Content = "Greet Me" />
</StackPanel>
</UserControl>
и такое окно:
<Window
x:Class = "XAMLUserControl.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control = "clr-namespace:WPFUserControl"
Title = "MainWindow" Height = "600" Width = "800">
<Grid>
<control:MyUserControl/>
</Grid>
</Window>
Есть ли способ обратиться к пользовательскому элементу управления без использования префикса control:
?
Итак, вместо того, чтобы писать
<control:MyUserControl/>
я хотел бы использовать
<MyUserControl/>
Это ссылка на пространство имен, вы можете создать другой элемент управления с точно таким же именем в другом пространстве имен, и как xaml узнать, на какой из них вы ссылаетесь?
Вы можете использовать XmlnsDefinitionAttribute , чтобы пространство имен, содержащее MyUserControl
, «принадлежало» к одному и тому же пространству имен xml (примерно так: http://schemas.microsoft.com/winfx/2006/xaml/presentation, в основном значение, присвоенное самому xmlns
в xaml вашего UserControl), как и всем собственным компонентам wpf. Это должно позволить вам использовать свой UserControl без использования префикса пространства имен.
Использование для вашего примера будет в AssemblyInfo.cs, выполняя [assembly:XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "WPFUserControl")]
.
Первый параметр — это пространство имен xml, которое будет использоваться, а второй параметр — это пространство имен c#, которое содержит вещи, которые вы хотите использовать без префикса в xaml.
Вы можете найти больше информации о том, как пространства имен XAML и C# работают вместе здесь
Да, вы можете это сделать. Но что, если Microsoft когда-нибудь предоставит элемент управления в пространстве имен «schemas.microsoft.com/winfx/2006/xaml/presentation» с тем же именем? Кажется, это плохая идея.
@KlausGütter Я никогда не говорил, что это хорошая идея, я просто показал, как сделать то, о чем просил спрашивающий.
Есть ли причина, по которой это запрещено? @NawedNabiZada