C# WPF-300+;UI上的按钮-非常慢。。。什么';还有什么选择?
我有大约300多个按钮,在网格中表示。当我尝试渲染时,加载所有按钮需要5秒钟。还有别的选择吗?已经存在的功能,如悬停、鼠标输入、左键单击等都是必需的。。。只是想知道是否有一种加速按钮渲染的方法 按钮是在网格中动态创建的,带有ItemsControl,其中包含ItemsPanelTemplate(这只是宽度和高度的网格定义),ItemsControl.Resources中的DataTemplate,其中创建了动态创建的切换按钮(300+) ItemsControl.Resources中的数据模板如下所示:C# WPF-300+;UI上的按钮-非常慢。。。什么';还有什么选择?,c#,wpf,rendering,C#,Wpf,Rendering,我有大约300多个按钮,在网格中表示。当我尝试渲染时,加载所有按钮需要5秒钟。还有别的选择吗?已经存在的功能,如悬停、鼠标输入、左键单击等都是必需的。。。只是想知道是否有一种加速按钮渲染的方法 按钮是在网格中动态创建的,带有ItemsControl,其中包含ItemsPanelTemplate(这只是宽度和高度的网格定义),ItemsControl.Resources中的DataTemplate,其中创建了动态创建的切换按钮(300+) ItemsControl.Resources中的数据模板如
<DataTemplate DataType="{x:Type engine:Weodel}">
<ToggleButton
Tag="{Binding}"
IsChecked="{Binding IsSelected}"
Height="{Binding ElementName=weItemControl,
Path=DataContext.ButtonHeightWidth}"
Width="{Binding ElementName=weItemControl,
Path=DataContext.ButtonHeightWidth}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="{Binding ElementName=weItemControl,
Path=DataContext.ButtonMarginToUse}"
Padding="2"
Style="{StaticResource WeButton}">
</ToggleButton>
</DataTemplate>
资源字典中按钮的样式:
<Style TargetType="{x:Type ToggleButton}" x:Key="WeButton">
<Setter Property="Background" Value="White"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid>
<Ellipse Fill="{TemplateBinding Background}" />
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" TextBlock.TextAlignment="Center">
<ContentPresenter.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextAlignment" Value="Center"/>
</Style>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" Value="{Binding GColour}"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background" Value="{Binding GColour}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这些按钮是怎么声明的?我曾经遇到过类似的问题,但是在MFC C++应用程序上。我最终使用SDL作为渲染和输入框架。必须重写所有的渲染和逻辑,但很容易处理1k+gui元素。我的观点是,常规表单呈现并不是为了显示这么多控件而设计的,只是你没有利用虚拟化功能。看看这里的答案:嘿,艾莉,我看到了这个,但我不知道该把它放在哪里。注意,虚拟化只有在你的很多按钮都在scrollviewer的可见区域之外时才有帮助。如果所有300多个按钮同时可见(无需滚动到视图中),虚拟化不会改变任何事情。