xamlの定義を再利用することで、この質問を再現しました。私のプロジェクトでxaml名前空間の定義を再利用する方法
using System.Windows.Controls;
namespace XamlDemo.Bar
{
public class ExtButton : Button { }
public class ExtLabel : Label { }
}
namespace XamlDemo.Foo
{
public class ExtTextBlock : TextBlock { }
public class ExtTextBox : TextBox { }
}
と
<UserControl x:Class="XamlDemo.ControlA"
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:XamlDemo"
xmlns:foo="clr-namespace:XamlDemo.Foo"
xmlns:bar="clr-namespace:XamlDemo.Bar"
mc:Ignorable="d">
<!--
xmlns:foo="clr-namespace:XamlDemo.Foo"
xmlns:bar="clr-namespace:XamlDemo.Bar"
foo and bar will tend to repeat in exactly this constellation all over the project.
If one of these namespaces changes all xaml files need to be edited.
I would like to include a different file as a component where i would only write foo and bar once
-->
<StackPanel>
<foo:ExtTextBlock></foo:ExtTextBlock>
<bar:ExtLabel></bar:ExtLabel>
</StackPanel>
</UserControl>
<UserControl x:Class="XamlDemo.ControlB"
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:XamlDemo"
xmlns:foo="clr-namespace:XamlDemo.Foo"
xmlns:bar="clr-namespace:XamlDemo.Bar"
mc:Ignorable="d" >
<StackPanel>
<foo:ExtTextBox></foo:ExtTextBox>
<bar:ExtButton></bar:ExtButton>
</StackPanel>
</UserControl>
どちらも私の地元の名前空間宣言を使用します。代わりに別のxamlへの参照を入れて、そこから名前空間を取得したいと思います。
私はこれを行う方法を見つけませんでした。これは、このように見えると思われるものを示すコンセプトコードです。明らかにこれはコンパイルされません。
<magic
xmlns:foo="clr-namespace:XamlDemo.Foo"
xmlns:bar="clr-namespace:XamlDemo.Bar">
</magic>
<UserControl x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns="get it from magic">
</UserControl>
XAML名前空間は何らかの形で特別ですか?通常のXMLルールに従っている場合、これらの名前空間宣言をユーザーコントロールの* containing要素に置くことができます(たとえば、両方の最も近い共通祖先を見つけるなど)。後で明示的に参照する必要はありません。 –