こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WPFのチェックボックス

VisualBasic 2013 でWPFを利用してグリッドを作成しております。

ユーザーコントロールにDataGridを配置し、Grid内にチェックボックスを1つ
配置しています。
データ表示後は1レコードに1つチェックボックスが配置された状態と
なります。
データ表示は問題なく行えるのですが、チェックボックスの動作が
想定と異なってしまいます。

・現在チェックボックスの挙動
 複数レコードでチェックボックスのチェックを付けた場合、
 画面をスクロールするとチェックが消える。

このような現象が発生する原因と対策がお分かりの方がいらっしゃいましたら
ご教授頂けると幸いです。

上記現象が発生するxamlは以下の通りです。
<UserControl x:Class="Grid_Tab_Roke_Detail"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="70" Width="1227" Background="White">

<UserControl.Resources>

<!-- ラジオボタンの共通styleを指定 -->
<!-- トグルボタン風に押すと色を変える -->
<Style TargetType="{x:Type CheckBox}"
BasedOn="{StaticResource {x:Type ToggleButton} }">
<Style.Triggers>
<!-- 未チェック時は透明 -->
<Trigger Property="IsChecked" Value="{x:Null}">
<Setter Property="Background" Value="Transparent" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background" Value="Transparent" />
</Trigger>
<!-- チェック時は青 -->
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>

</UserControl.Resources>

<Grid>
<CheckBox Content="選択" IsChecked="{Binding IsSelected.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="3,3,0,0" VerticalAlignment="Top" Width="48" Height="57"
/>
<TextBox x:Name="Text_HinNM" Text="{Binding 商品名, Mode=OneTime, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="304,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="330" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="350" MinHeight="16" IsHitTestVisible="True" FontSize="16">
<TextBox.Foreground>
<SolidColorBrush Color="Black"/>
</TextBox.Foreground>
</TextBox>
</Grid>


</UserControl>

投稿日時 - 2018-07-30 13:10:27

QNo.9523287

すぐに回答ほしいです

質問者が選んだベストアンサー

描画はウィンドウ内に入っている部分がされるので、スクロールをして、その後スクロールしてウィンドウ内に戻ってきたときに描画処理が行われますが、ユーザコントロールを使っていなければ、なんとなくチェックしたことを一時的に覚えている可能性もあるのかなと思うのですが、ユーザコントロールを使っているので、描画はユーザコントロールの責任でしないといけないので、もしかしたらそのあたりが関係してないのかなと思います。
一度ユーザコントロールを使わないで、Gridとチェックボックスだけを使った簡単なサンプルを作ってみては試されてはどうでしょうか。

投稿日時 - 2018-08-01 01:57:49

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

XAMLはあまりよくわかってないのですが、チェックボックスがチェックされたら、その値を保存しておく変数はユーザコントロールの中にありますか?
なければ、スクロールして戻ってきたときには初期状態になっているからだと思います。

投稿日時 - 2018-07-31 15:23:43

補足

ご回答ありがとうございます。
チェックボックスのチェック値を保存する変数などは準備しておりません。
変数はすぐにでも準備できるのですが、回答頂いているような
DataGridをスクロールする際に、「戻ってきた」事を捕捉する事ができるものなのでしょうか。

お手数おかけして申し訳ございませんが、宜しくお願い致します。

投稿日時 - 2018-07-31 16:17:59

あなたにオススメの質問