WPFの画面表示速度について

TreeListViewの画面表示が遅かったのでいろいろ調べてみた。
結論的には、WPFが遅いんじゃなくて、私の使い方が間違っているだけだった。
WPFはいろんなことができるけど、使い方を間違っちゃうことが多いのでまだまだ場数が足りないのかなと思う。

250アイテムを表示するのに20秒以上かかっている。

どうやら画面表示が遅いので、いろいろと試してみた結果、TreeListViewにTextBoxを利用しているのが原因みたい。

TextBlockに置き換えることで比べ物にならないぐらい早くなった。
確かにTextBoxを250行×5列の数だけ表示していれば遅くなるのも当然な気がする。

常に編集状態にする必要はないのでExcelみたいに編集モードになった箇所だけTextBoxを表示して編集できるように修正をした。

Bool値をVisiblityに変換するConverterを定義し、普段はTextBlockを表示しておいて、IsSelectedプロパティがTrueになったときだけ、TextBoxのVisibilityをCollapsedからVisibleに変換する。

<GridViewColumn x:Name="gvcTitle" Header="タイトル" Width="200" HeaderContainerStyle="{StaticResource GridViewColumnHeaderStyle}">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <!-- Marginで左右から-6pxとしないとHearder部のタイトルとラインの位置がずれる.GridViewの既知の不具合 -->
            <Border BorderBrush="Black"  BorderThickness="0,0,0.5,0" Margin="-6,0,-6,0">
                <DockPanel>
                    <!--The Expander Button (can be used in any column (typically the first one))-->
                    <TreeListView:TreeListViewExpander Focusable="False" Visibility="{Binding TitleExpanderVisibility}"/>
                    <TreeListViewSubControls:TreeListItemTextBox Text="{Binding Data.Title, Mode=TwoWay}" VerticalContentAlignment="Center" VerticalAlignment="Stretch" Margin="2,2,2,2" HorizontalContentAlignment="Stretch"

                                                                 Style="{StaticResource EditTreeListTextBoxStyle}"  HorizontalAlignment="Stretch" BorderThickness="0" Opacity="1"  TabIndex="1" 

                                                                 Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DockPanel}}}" IsReadOnly="{Binding IsReadOnly}"

                                                                 Visibility="{Binding IsSelected,Converter={StaticResource boolToVisiblityConverter},ConverterParameter=True}"/>
                    <Border BorderThickness="0" Visibility="{Binding IsSelected,Converter={StaticResource boolToVisiblityConverter},ConverterParameter=False}" Margin="2,2,2,2" HorizontalAlignment="Stretch">
                        <TreeListViewSubControls:TreeListItemTextBlock Text="{Binding Data.Title, Mode=TwoWay}"  Style="{StaticResource TreeListTextBlockStyle}"  Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DockPanel}}}"  />
                    </Border>
                </DockPanel>
            </Border>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

PowerShellでEdgeを自動化(インストール不要。参考:郵便追跡サービス自動操作)

1.経緯について  RPAのソフトをインストールできないので、これまでVBSでCreateObjectでブラウザの自動操作をすることがたまにあった。 ※いざというときの手札として持っているだけで安心感が段違い  見た目上IEがインストールされていなくても、CreateObject...