标签: datatemplate

wpf:用户控件与自定义控件的性能问题

性能视图用户控件和自定义控件哪个更好?现在我正在使用用户控件,在特定场景中,我创建了大约 200 个(大约)不同的此控件实例,但加载时速度有点慢,我需要等待至少 20-30 秒才能完成操作。我应该怎么做才能提高性能?

编辑:

场景是:在我的Window中,我有一个TreeView,其中的每一项代表不同的用户定义类型,所以我为每种类型定义了DataTemplate。这些数据模板使用用户控件,并且这些用户控件与用户定义类型的属性绑定。很简单,TreeView 映射用户定义类型的分层数据结构。现在我从 Xml 读取并创建 Heirarchical 结构并将其分配给 TreeView 并且加载需要大量时间。有什么帮助吗?

c# wpf treeview user-controls datatemplate

4
推荐指数
2
解决办法
3528
查看次数

当 IsSelected 和 TreeView 中使用的两种类型时更改 TreeViewItem 模板

在我的 TreeView 中,我使用两个不同的类进行绑定。例如,我有一个组,可以有 ChildGroup 并且可以有 Items。该类的示例代码:

using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
public class Group
{
    public Group(string name)
    {
        Name = name;
        items = new ObservableCollection<Item>();
        groups = new ObservableCollection<Group>();
    }
    public string Name { get;
        set;
    }

    private ObservableCollection<Item> items;
    private ObservableCollection<Group> groups;

    public ObservableCollection<Item> Items
    {
        get { return items; }
    }


    public ObservableCollection<Group> Groups
    {
        get { return groups; }
    }

    public IEnumerable<object> AllItems
    {
        get
        {
            foreach (var group in groups)
            {
                yield return …
Run Code Online (Sandbox Code Playgroud)

wpf treeview datatemplate hierarchicaldatatemplate

4
推荐指数
1
解决办法
5861
查看次数

带样式的自定义 WPF ListView(使用 DataTemplate) - 如何添加标题?

我有以下代码

行的数据模板

<!-- Template for each item in ListView -->
    <DataTemplate x:Key="ItemTemplate">
        <Grid>                                
            <Grid.ColumnDefinitions>                    
                <ColumnDefinition Width="25"/>
                <ColumnDefinition Width="90"/>
                <ColumnDefinition Width="325"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:ItemsView}}, Path=ParentColumnWidth}"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="100"/>                    
            </Grid.ColumnDefinitions>
            <CheckBox Grid.Column="0" x:Name="Statement" IsChecked="{Binding Path=statement}" Foreground="{StaticResource CustomWhite}" VerticalAlignment="Center" Style="{StaticResource SelectionCheckBox}"/>
            <TextBlock Grid.Column="1" Text="{Binding Path=idate, StringFormat=d MMM yy}" FontSize="15" Foreground="{StaticResource CustomWhite}"/>
            <TextBlock Grid.Column="2" Text="{Binding Path=fullcomment}" FontSize="15" Foreground="{StaticResource CustomWhite}"/>
            <TextBlock Grid.Column="3" Text="{Binding Path=amount, StringFormat={}{0:N2}}" FontSize="15" Foreground="{Binding Converter={StaticResource GetColourConverterItemAmount}}" TextAlignment="Right" Padding="0,0,25,0"/>
            <TextBlock Grid.Column="4" Text="{Binding Path=acc}"  FontSize="15" Foreground="{StaticResource CustomWhite}"/>
            <TextBlock …
Run Code Online (Sandbox Code Playgroud)

wpf listview datatemplate

4
推荐指数
1
解决办法
3万
查看次数

启用带有自定义列的 DataGrid 复制

我有一个 DataGrid,其中有带有列模板的自定义列,用于插入特殊的工具提示。执行此操作时,如何将此数据复制到剪贴板?

我的 DataGrid 的 XAML 代码:

<DataGrid x:Name="CapabilityGrid" IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Variable">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" ToolTip="{Binding Name, Converter={StaticResource tooltipConverter}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Value">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Value}"></TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

wpf datatemplate wpfdatagrid

4
推荐指数
1
解决办法
2089
查看次数

基于枚举为数据模板选择用户控件

我正在开发一个 WPF 应用程序,目前我有一个ItemsControl绑定到我的视图模型ObservableCollection,我有一个DataTemplate使用 aUserControlcanvas. 您可以使用多个用户控件,然后根据一个来切换使用哪个Enum?另一种查看它的方法是为基于的项目创建 aButton或 a 。TextBoxObservableCollectionEnum

data-binding wpf datatemplate

4
推荐指数
1
解决办法
2486
查看次数

使附加属性在 DataTemplate 中工作

我得到了一个ItemsControl使用Canvasas 的项目ItemsPanel,它的项目根据绑定类型呈现为不同的 WPF 形状,基本上如下所示:

<ItemsControl  ItemsSource="{Binding PreviewShapes}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:UiPreviewLineViewModel}">
            <Line X1="{Binding Start.X}" Y1="{Binding Start.Y}"
                        X2="{Binding End.X}" Y2="{Binding End.Y}" 
                        StrokeThickness="0.75" Stroke="{Binding Brush}" x:Name="Line" ToolTip="{Binding Text}">
            </Line>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:UiPreviewEllipsisViewModel}">
            <Ellipse Canvas.Left="{Binding UpperLeft.X" Canvas.Top="{Binding UpperLeft.Y}" 
                     Width="{Binding Width}" Height="{Binding Height}" 
                     StrokeThickness="0.75" Stroke="{Binding Brush}" x:Name="Ellipse" ToolTip="{Binding Text}">
            </Ellipse>
        </DataTemplate>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="SketchCanvas" ClipToBounds="False">
            </Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

因此,我基本上将对象添加到PreviewShapes视图模型中,并根据它们渲染到 WPFLineEllipses 的类型。这基本上可以工作,但附加的属性Canvas.Left和 …

wpf datatemplate attached-properties

4
推荐指数
1
解决办法
1890
查看次数

绑定到 DataTemplate 内按钮的命令不起作用

例子:

<ListBox Name="List" 
             ItemsSource="{Binding Items}" 
             SelectedIndex="{Binding SelectedIndex}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel >
                    <Button DockPanel.Dock="Left" Content="Show" Command="{Binding ShowCommand}" CommandParameter="{Binding}"/>
                    <TextBlock Text="{Binding }"/>
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
Run Code Online (Sandbox Code Playgroud)

单击按钮什么也不做。我试图将命令绑定到 外面的按钮DataTemplate并且它起作用了。我还尝试将按钮注册DataTemplate到 a 中Click_event,这确实有效。

为什么该命令在 DataTemplate 中不起作用?

wpf command button datatemplate

4
推荐指数
1
解决办法
1676
查看次数

访问WPF中DataTemplate内的项目

我想知道在WPF中你是否能够获得datatemplate对象的实际实例.例如,在以下情况中:

<UserControl>
    <UserControl.Resources>
        <DataTemplate x:Key="MyTemplate">
            <CustomControl ></CustomControl>
        </DataTemplate>
    </UserControl.Resources>

    <ListBox DataTemplate="{StaticResource MyTemplate}"></ListBox>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

假设CustomControl有一个CustomEvent和一个公众CustomMethod.我想在用户控件中访问该事件和公共方法.这可能吗?我怎么能这样做?在此先感谢您的帮助.

干杯,

尼鲁

wpf datatemplate

3
推荐指数
1
解决办法
1万
查看次数

在DataTemplate中排列ItemsControl项

出于某种原因,在dataTemplate中添加的项目将不会执行我告诉他们要做的事情!

我试图将一些图像水平放置在一个堆叠面板中,但无论我如何尝试,它们只是垂直移动.

这是我的xaml.

<DataTemplate x:Name="View">
  <Border BorderBrush="Red" BorderThickness="4" >
      <StackPanel  Orientation="Horizontal">
             <ItemsControl ItemsSource="{Binding Path=_Collection, Mode=OneWay}" >
                 <ItemsControl.ItemTemplate>
                      <DataTemplate >
                          <Image Source="{Binding _Source}" />
                      </DataTemplate>
                 </ItemsControl.ItemTemplate>
             </ItemsControl>
         <TextBlock Height="30" FontFamily="Trebuchet MS" FontSize="18" Text="{Binding _Name}" />
      </StackPanel>
  </Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

一切都很好.这是从用户控件内部调用的

<ItemsControl ItemTemplate="{StaticResource siteView}" ItemsSource="{Binding Path=_SiteDisplay"/>
Run Code Online (Sandbox Code Playgroud)

我的obervable集合_SiteDisplay包含另一个名为_Collection的oberservable集合,它保存图像的url.

这是从实际代码中删除的,但说明了问题.我不能让图像水平对齐!非常感谢任何帮助 - 或建议更好的方法.

c# silverlight datatemplate itemscontrol stackpanel

3
推荐指数
1
解决办法
6770
查看次数

对不同类型使用相同的DataTemplate

是否可以对定义的类型选择使用相同的DataTemplate,即如何更改以下示例代码,以便对所有列出的类型使用相同的DataTemplate?

<DataTemplate DataType="{x:Type local:ClassA, ClassB, ...}">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

c# wpf datatemplate

3
推荐指数
2
解决办法
1551
查看次数