首先发布,请轻松一下。 我试图从另一个页面获取复选框的值(这是WPF项目中导航表单的一部分),但是一旦页面更改,它总是将值重置为false。如何正确绑定IsChecked值?我正在学习刚刚开始使用WPF,所以模板非常基础,如果有更好的方法,那么我愿意接受它。
此后页面的代码是vb.net,而不是c#,如果它将起作用。
该样式的调用如下:
<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>
先感谢您的帮助!
我应该补充一下,我已经坚持了一天以上,我已经尝试过模板绑定,绑定路径,以及基于我已经找到的c#答案的点击程序。总是导致复选框被重置。
答案 0 :(得分:1)
我的问题与复选框无关,因为它发生了,页面没有静态命名,因此属性始终提供默认值。 (菜鸟错误 - 很遗憾)
在上方,如果有人想要捏它,上面的代码可以完美地工作(以有限的方式)!
VB.NET:
Private Sub MainForm_Loaded(sender As Object, e As RoutedEventArgs) Handles MainForm.Loaded
Me.NavigationService.Navigate(ContactDetailsPage)
End Sub
而不是说明来源的XAML:
<NavigationWindow x:Name="MainForm" x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="" Source="ContactDetails.xaml">
答案 1 :(得分:0)
我认为问题在于您在模板中定义绑定而不是在控件中。除非是DataTemplate,否则通常不会在模板中进行绑定。
<CheckBox IsChecked="{Binding Value}" Content="Photo" x:Name="OT_Photo" Grid.Row="0" Grid.Column="0" Style="{StaticResource ElementCheckbox}" />
不要忘记为对象设置de DataContext。
您可能希望首先测试绑定而不进行模板化。如果这不能解决您的问题,那么也可以发布代码隐藏。