1

初投稿なのでお手柔らかに。別のページ (これは WPF プロジェクトのナビゲーション フォームの一部です) からチェックボックスの値を取得しようとしていますが、ページが変更されるとすぐに値が常に false にリセットされます。IsChecked 値を適切にバインドするにはどうすればよいですか? 私は WPF を使い始めたばかりなので、テンプレートは非常に基本的なものです。これを行うためのより良い方法があれば、それを受け入れます。

また、コードビハインドページは、それが役割を果たす場合、c#ではなくvb.netです。

スタイルは次のように呼び出されます。

<CheckBox Content="Photo" x:Name="OT_Photo" Grid.Row="0" Grid.Column="0" Style="{StaticResource ElementCheckbox}" />

これらのページには数百のチェックボックスがあるため、それぞれの変数を避けたいと思います。

スタイルは「Application.xaml」にあります

<Style TargetType="CheckBox" x:Key="ElementCheckbox">
        <Setter Property="IsThreeState" Value="True" />
        <Setter Property="IsChecked" Value="{Binding IsChecked ,Mode=TwoWay}"  /> 
        <Setter Property="Foreground" Value="Navy" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="Margin" Value="15,4,0,4" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="MaxWidth" Value="500" />
        <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <DockPanel DockPanel.Dock="Left">
                        <Border x:Name="Border" CornerRadius="0" VerticalAlignment="Top">
                            <Image Height="20" Width="20" Name="CheckMark" />
                        </Border>
                        <TextBlock x:Name="CheckText" Text="{TemplateBinding Content}" Margin="5,0,0,0" FontSize="{TemplateBinding FontSize}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" />
                    </DockPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="{x:Null}">
                            <Setter TargetName="CheckMark" Property="Source" Value="CheckBoxNull.png" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="false">
                            <Setter TargetName="CheckMark" Property="Source" Value="CheckBoxCross.png" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="true">
                            <Setter TargetName="CheckMark" Property="Source" Value="CheckBoxTick.png" />
                        </Trigger>
                         <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Effect" TargetName="Border">
                                <Setter.Value>
                                    <DropShadowEffect ShadowDepth="1" Color="Blue" Opacity="1" BlurRadius="2"/>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Foreground" Value="Blue" TargetName="CheckText" />
                        </Trigger>
                          </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

事前に助けてくれてありがとう!

私はこれに1日以上立ち往生していることを追加する必要があります。テンプレートバインディング、バインディングパス、および既に見つけたc#の回答に基づいたクリック手順を試しました。ただし、常にチェックボックスがリセットされます。

4

2 に答える 2

0

問題は、コントロールではなくテンプレートでバインディングを定義していることだと思います。通常、DataTemplate でない限り、テンプレートでバインドを行いません。

<CheckBox IsChecked="{Binding Value}" Content="Photo" x:Name="OT_Photo" Grid.Row="0" Grid.Column="0" Style="{StaticResource ElementCheckbox}" />

オブジェクトに DataContext を設定することを忘れないでください。

テンプレートを作成せずに、最初にバインディングをテストすることをお勧めします。これで問題が解決しない場合は、コード ビハインドも投稿すると役立つ場合があります。

于 2014-08-21T13:17:46.923 に答える