gpt4 book ai didi

WPF - ItemTemplate 未按预期运行

转载 作者:行者123 更新时间:2023-12-04 22:02:12 27 4
gpt4 key购买 nike

我有一个 UserControl我用来显示 UIElement 的列表s。该控件由单个 ItemsControl它是 ItemPanelTemplate切换为水平 StackPanel , 它的 ItemsSource绑定(bind)到 DependencyPropertyUserControl 曝光及其ItemTemplate设置在 UserControl.Resources .

一切正常,除了 ItemTemplate从来没有得到应用,我不明白为什么。完整来源如下。

UserControl.xaml -

<UserControl x:Name="UC" x:FieldModifier="private" x:Class="ContentSliderControl.ContentSlider"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>

<DataTemplate x:Key="pageTemplate">
<Border CornerRadius="10" Padding="5" Height="200" Width="200" Background="#333">
<ContentControl Content="{Binding}"/>
</Border>
</DataTemplate>

<ItemsPanelTemplate x:Key="template">
<StackPanel IsItemsHost="True"
Orientation="Horizontal"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
</ItemsPanelTemplate>
</UserControl.Resources>

<ItemsControl ItemsPanel="{StaticResource template}"
ItemTemplate="{StaticResource pageTemplate}"
ItemsSource="{Binding ElementName=UC,Path=Pages}"/>

UserControl.xaml.cs -
[ContentProperty("Pages")]
public partial class ContentSlider : UserControl
{


public List<UIElement> Pages
{
get { return (List<UIElement>)GetValue(PagesProperty); }
//set { SetValue(PagesProperty, value); }
}

// Using a DependencyProperty as the backing store for Pages. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PagesProperty =
DependencyProperty.Register("Pages", typeof(List<UIElement>), typeof(ContentSlider), new UIPropertyMetadata(null));



public ContentSlider()
{
InitializeComponent();
}
}

}

我像这样在主窗口中使用控件-
    <slider:ContentSlider >
<slider:ContentSlider.Pages>
<Button>1</Button>
<Button>2</Button>
<Button>3</Button>
<Button>4</Button>
</slider:ContentSlider.Pages>
</slider:ContentSlider>

按钮看起来不错,但不在 200px 方形边框内。

任何帮助将不胜感激。
谢谢。

最佳答案

尼尔是正确的,ItemsControl将项目直接添加到其Panel如果它们是 UIElements。我在 MSDN 中找不到任何关于这种行为的提及,但 WPF 博士在 his article on item containers 中提到了它。 :

If a UIElement is added to the Items collection of an explicit ItemsControl instance (as opposed to an instance of a derived class like ListBox), it will become a direct child of the items panel. If a non-UIElement is added, it will be wrapped within a ContentPresenter.



您的解决方案可能是使用 ListBox而是设置 ItemContainerStyle到一个新的 Style对于 ListBoxItem ,在那种风格中,使用 ControlTemplate与您的 Border在里面。

关于WPF - ItemTemplate 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661831/

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