gpt4 book ai didi

c# - 将 ItemsControl ItemTemplate 中的属性绑定(bind)到 UserControl 上的 DP 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:06 27 4
gpt4 key购买 nike

UserControl 有 3 个依赖属性:FormatAvailabilities、Orientation 和 FullText。 FormatAvailabilities 绑定(bind)到 ItemsControl 的 ItemsSource 属性。如果 StackPanel 位于 ItemsControl 中的 ItemsPanelTemplate 中,则 Orientation 绑定(bind)到 Orientation 属性。 FullText 绑定(bind)到 ItemsControl 的 DataTemplate 内两个 TextBlock 的 Visibility 属性。我使用两个转换器来确定要显示哪个 TextBlock:BoolToVisibilityConverter 和 BoolToInvertedVisibilityConverter(后者是前者的反转)。我将 Visibility 属性按原样从 TextBlock(它们都是独立的)复制到 ItemsControl 并且它工作正常..

似乎 TextBlock 上的绑定(bind)无法正常工作,因为两者始终可见。由于它们都绑定(bind)到同一属性,但其中一个是倒置的,因此两者永远不可能同时可见。

我在我的转换器中放置了一个断点,但它从未被击中,所以我的猜测是从重复控件内部绑定(bind)到它所在的外部控件存在问题。

应用程序.xaml:

<common:BaseApp x:Class="xyz.App" xmlns:converters="clr-namespace:xyz.Converters;assembly=xyz">
<common:BaseApp.RootVisual>
<phone:PhoneApplicationFrame x:Name="RootFrame" Source="/Home.xaml"/>
</common:BaseApp.RootVisual>

<common:BaseApp.Resources>
<converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<converters:BoolToVisibilityConverter x:Key="BoolToInvertedVisibilityConverter" IfTrue="Collapsed" IfFalse="Visible"/>
</common:BaseApp.Resources>
</common:BaseApp>

用户控件 XAML:

<UserControl 
x:Name="FormatsControl"
x:Class="xyz.Formats"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480">

<ItemsControl Background="Transparent" ItemsSource="{Binding ElementName=FormatsControl, Path=FormatAvailabilities}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="{Binding ElementName=FormatsControl, Path=Orientation}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding BindsDirectlyToSource=True}" Margin="0,0,10,0" Visibility="{Binding ElementName=FormatsControl, Path=FullText, Converter={StaticResource BoolToVisibilityConverter}}"/>
<TextBlock Text="{Binding Description}" Margin="0,0,10,0" Visibility="{Binding ElementName=FormatsControl, Path=FullText, Converter={StaticResource BoolToInvertedVisibilityConverter}}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>

用户控件CS:

namespace xyz
{
public partial class Formats : UserControl
{
public static readonly DependencyProperty FormatAvailabilitiesDependencyProperty = DependencyProperty.Register("FormatAvailabilities", typeof(FormatAvailability[]), typeof(Formats), null);
public static readonly DependencyProperty OrientationDependencyProperty = DependencyProperty.Register("Orientation", typeof(Orientation), typeof(Formats), new PropertyMetadata(Orientation.Horizontal));
public static readonly DependencyProperty FullTextDependencyProperty = DependencyProperty.Register("FullText", typeof(bool), typeof(Formats), null);

public FormatAvailability[] FormatAvailabilities
{
get { return (FormatAvailability[])base.GetValue(Formats.FormatAvailabilitiesDependencyProperty); }
set { base.SetValue(Formats.FormatAvailabilitiesDependencyProperty, value); }
}

public Orientation Orientation
{
get { return (Orientation)base.GetValue(Formats.OrientationDependencyProperty); }
set { base.SetValue(Formats.OrientationDependencyProperty, value); }
}

public bool FullText
{
get { return (bool)base.GetValue(Formats.FullTextDependencyProperty); }
set { base.SetValue(Formats.FullTextDependencyProperty, value); }
}

public Formats()
{
InitializeComponent();
}
}
}

我一定是在看东西...谢谢!

最佳答案

如本 blog post 所述,在 Silverlight 3 中命名 UserControl 存在问题,它也存在于 Windows Phone 7 版本的 Silverlight 中。实际上,如果您在使用它的 XAML 中为 UserControl 指定一个名称(即它的父级),那么它将覆盖在 UserControl 自己的 XAML 文件中给定的名称。

关于c# - 将 ItemsControl ItemTemplate 中的属性绑定(bind)到 UserControl 上的 DP 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com