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>
登録:
コメントの投稿 (Atom)
PowerShellでDataSetのXMLの内容をシリアライズし、生成された文字列を再度デシリアライズする
修正前のテーブルの内容をXMLデータとして保存し、ログテーブルに格納することで、履歴を退避する Step1 DataSetをシリアライズしXML形式の文字列を作成する Step2 文字列をログテーブルへ保存する(普通にInsert) Step3 ログ...
-
TreeListView上でコンボボックスを利用するときにフォーカスのあるコンボボックスの色をイベントで変えようとしたけど上手くいかなかった。 色々と調べているとXaml側のテンプレートをいじる必要があるみたいだったので、いろいろとやってみた。 とりあえず、コンボボックス...
-
サイトに自動でログインするVBSのソース 事前に対象のWebサイトを開いて、F12キーを押下して、要素の名前を調べておく。 ※Edge、Chromeなどのブラウザ objIE.Visible = Trueの部分を objIE.Visible = Falseにしておけば...
-
開発中のプログラムがあまり進んでないのでSQLの小ネタ。 昔、よくあった遅いSQLの改善方法について、記載。 インデックスを張ったりするのもいいけど、SQLを作るときにデータをたくさん持ってきてまとめて条件分岐をCASE式でするだけで 圧倒的に速度が改善できる。 例えば...
0 件のコメント:
コメントを投稿