C# WPF-300+;UI上的按钮-非常慢。。。什么';还有什么选择?

C# WPF-300+;UI上的按钮-非常慢。。。什么';还有什么选择?,c#,wpf,rendering,C#,Wpf,Rendering,我有大约300多个按钮,在网格中表示。当我尝试渲染时,加载所有按钮需要5秒钟。还有别的选择吗?已经存在的功能,如悬停、鼠标输入、左键单击等都是必需的。。。只是想知道是否有一种加速按钮渲染的方法 按钮是在网格中动态创建的,带有ItemsControl,其中包含ItemsPanelTemplate(这只是宽度和高度的网格定义),ItemsControl.Resources中的DataTemplate,其中创建了动态创建的切换按钮(300+) ItemsControl.Resources中的数据模板如

我有大约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多个按钮同时可见(无需滚动到视图中),虚拟化不会改变任何事情。