CustomControls (проект библиотеки классов Winui3) )/CustomTableItem.cs
namespace CustomControls
{
public sealed class CustomTableItem : Control
{
DependencyProperty TableNameProperty = DependencyProperty.Register(
nameof(TableName),
typeof(string),
typeof(CustomTableItem),
new PropertyMetadata(null));
public string TableName
{
get => (string)GetValue(TableNameProperty);
set => SetValue(TableNameProperty, value);
}
public CustomTableItem()
{
this.DefaultStyleKey = typeof(CustomTableItem);
}
public CustomTableItem(string TableName)
{
this.DefaultStyleKey = typeof(CustomTableItem);
this.TableName = TableName;
}
}
}
CustomControls/Themes/Generic.xaml
//one other style above [...]
View(упакованный проект winui3)/CustomTablePage.xaml
x:Class="View.CustomTablePage"
xmlns="http://schemas.microsoft.com/winfx/2006 ... esentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:View"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:customControls ="using:CustomControls"
xmlns:mc="http://schemas.openxmlformats.org/marku ... ility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
CustomTablePage отображается с помощью функции ContentFrame.Navigate()
Конечный результат:

Когда я размещаю точно такой же элемент управления на странице, экземпляр которой создается один раз и используется повторно(ContentFrame.Content = PageObject) Свойство работает:

Расположение другой страницы: View/PageName.xaml.
Код:
Я пробовал изменить привязку в текстовом свойстве шаблона, но это все равно не сработало. Я видел некоторые ответы, в которых говорилось о чем-то под названием DataContex, но я не понимал, как это работает, и заметил, что большинство из них использовали пользовательские элементы управления вместо пользовательских элементов управления или WPF.
Изменить:
После отладки привязки (после ответа @Andrew KeepCoding) и добавления TargetNullValue в строку привязки
Text="{Binding TableName, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, FallbackValue='Error Binding', TargetNullValue='Source is null!'}"
Я сузил проблему до нулевого значения источника.
Изменить 2:После более подробного рассмотрения моего кода конструктора CustomTablePage:
namespace View
{
///
/// An empty page that can be used on its own or navigated to within a Frame.
///
public sealed partial class CustomTablePage : Page
{
public CustomTablePage()
{
this.InitializeComponent();
var item = new CustomTableItem();
item.TableName = "Test";
/*itemsViewTables.ItemsSource = new ObservableCollection
{
item
};*/
}
}
}
И комментируем строки:
var item = new CustomTableItem();
item.TableName = "Test";
Текст кнопки начал отображаться, но если я добавлю более одной кнопки, будет отображаться только последний текст, все остальные будут иметь значение null. Похоже, что на странице может быть только один элемент управления этого типа, независимо от того, отображаются остальные или нет.
Добавлено в CustomTablePage.xaml:
Что происходит сейчас:
[img]https://i .sstatic.net/1WfBK83L.png[/img]
Проблема решена путем добавления public static readonly в объявление свойства зависимостей:
public static readonly DependencyProperty TableNameProperty = DependencyProperty.Register(
nameof(TableName),
typeof(string),
typeof(CustomTableItem),
new PropertyMetadata(null));
Подробнее здесь: https://stackoverflow.com/questions/790 ... oesnt-work
Мобильная версия