C# UWP模板查找和修改控件
我有一个选项卡视图,其标题和项目使用模板。我在header模板中找到了元素,但是当我以编程方式更改它们的可见性时,属性仍然保持不变。为什么呢?我该怎么修 我曾尝试将文本NameTextBlock和NameTextBox更改为类似helloworld的字符串,但它仍然显示原始文本C# UWP模板查找和修改控件,c#,templates,uwp,tabview,C#,Templates,Uwp,Tabview,我有一个选项卡视图,其标题和项目使用模板。我在header模板中找到了元素,但是当我以编程方式更改它们的可见性时,属性仍然保持不变。为什么呢?我该怎么修 我曾尝试将文本NameTextBlock和NameTextBox更改为类似helloworld的字符串,但它仍然显示原始文本 private void RenameClick(object sender, RoutedEventArgs e) { var flyoutItem = sender as MenuFl
private void RenameClick(object sender, RoutedEventArgs e)
{
var flyoutItem = sender as MenuFlyoutItem;
var tab = (TabViewItem)PlaylistTabView.ContainerFromItem(flyoutItem.DataContext);
var header = tab.HeaderTemplate.LoadContent();
RenameHeader(header, true, true);
}
private void RenameHeader(DependencyObject header, bool isEdit, bool selectAll)
{
var NameTextBlock = (TextBlock)VisualTreeHelper.GetChild(header, 1);
NameTextBlock.Visibility = isEdit ? Visibility.Visible : Visibility.Collapsed;
TextBox NameTextBox = (TextBox)VisualTreeHelper.GetChild(header, 2);
NameTextBox.Visibility = isEdit ? Visibility.Collapsed : Visibility.Visible;
if (selectAll) NameTextBox.SelectAll();
}
--更新--
这是我的校长办公室:
<controls:TabView.ItemHeaderTemplate>
<DataTemplate x:DataType="data:Playlist">
<SymbolIcon Symbol="Audio" />
<TextBlock
x:Name="NameTextBlock"
Margin="10,0,5,0"
Text="{x:Bind Name, Mode=OneWay}" />
<TextBox
x:Name="NameTextBox"
Margin="10,0,5,0"
AcceptsReturn="True"
Background="Transparent"
ManipulationCompleted="NameTextBox_ManipulationCompleted"
Text="{x:Bind Name, Mode=TwoWay}"
Visibility="Collapsed" />
</StackPanel>
</DataTemplate>
</controls:TabView.ItemHeaderTemplate>
在这种情况下,我建议使用绑定来解决您的问题 您可以尝试让类继承INotifyPropertyChanged接口,并在属性更改时调用OnPropertyChanged方法 公共类播放列表:INotifyPropertyChanged { 私有字符串\u名称; 公共字符串名 { 获取{return\u name;} 设置 { _名称=值; 不动产变更; } } 公共事件属性更改事件处理程序属性更改; public void OnPropertyChanged[CallerMemberName]字符串propertyName=null { PropertyChanged此,新PropertyChangedEventArgspropertyName; } } 然后您可以将其绑定到HeaderTemplate中 类似地,如果需要更改TextBlock的可见性,有两种方法 第一个是将Visibility属性添加到Playlist类中,该类的创建方式与Name属性相同 第二种是根据特定条件(如IsEdit)通过IValueConverter进行转换
向你问好。我明白你的意思。我还附上了我的HeaderTemplate代码。您知道为什么编程方式不起作用吗?LoadContent方法将基于DataTemplate创建一个新的UIElement。因此,您得到的标题不是当前看到的标题。我可以通过编程方式更改模板中的元素吗?我需要动态更改某些内容。您可以将IsSelected属性添加到播放列表模型中,在SelectionChanged时修改其值,并通过绑定更改ItemHeaderTemplate的显示。不建议使用VisualTreeHelper直接获取模板内容。由于反射,这将降低软件性能。对不起,我没有把问题说清楚。我想要实现的是,我想要改变AlbumCoveran图像,当它的TabItem被选中时,通过在我的播放列表模型中随机选取一个本地音乐文件来异步地从缩略图获取源,并且我还需要以异步方式相应地改变背景。你还认为使用装订合适吗?