【问题标题】:Binding Varialbes in XAML with VB Code Behind使用 VB 代码在 XAML 中绑定变量
【发布时间】:2020-06-13 18:16:23
【问题描述】:

似乎这将是一个简单的解决方案,但我已经为此苦苦挣扎了一个多星期。 我要做的就是将 XAML 变量设置为与后面的 VB 代码不同的颜色

在我的 Application.xaml 中,我定义了一个纯色画笔,然后使用该画笔定义样式:

<Application.Resources>
    <SolidColorBrush x:Name="BrushBG"  x:Key="KeyMainBrush" Color="White"/>
    <Style x:Name="styleGridBG" x:Key="GridBGColor" TargetType="Grid">
        <Setter Property="Background" Value="{StaticResource KeyMainBrush}"/>
    </Style>
</Application.Resources>

在我的主窗口 XAML 中,我有一个使用该样式的网格

<Grid x:Name="grdColor" Style="{DynamicResource GridBGColor}" 
HorizontalAlignment="Left" Height="77" Margin="205,100,0,0" VerticalAlignment="Top" Width="493" />

在我的MainWindow VB中,我想在选中单个单选按钮时将该颜色更改为红色。我能读懂颜色,但不知道如何写颜色:

Private Sub rdRed_Checked(sender As Object, e As RoutedEventArgs) Handles rdRed.Checked
    MsgBox(Me.FindResource("KeyMainBrush").ToString)
    DataContext(Me.FindResource("KeyMainBrush")) = New SolidColorBrush(Colors.Red)
End Sub

我收到错误 System.NullReferenceException: 'Object variable or With block variable not set.'

【问题讨论】:

  • 如果没有具有 runat="server" 的对象,您无法在代码中引用对象因此,将该属性 (runat="server") 添加到表单上的网格控件应该允许您从 vb 代码中引用并使用该网格对象。现在我刚刚注意到这不是 asp.net - 所以我很可能在这里错了。
  • @AlbertD.Kallal,“这不是 asp.net - 所以我很可能在这里错了” - 是的。 WPF 没有 runat="server" 的概念

标签: wpf vb.net xaml


【解决方案1】:

您不需要 FindResource 或 DataContext。只需将必要的画笔添加到资源中:

Private Sub rdRed_Checked(sender As Object, e As RoutedEventArgs) Handles rdRed.Checked
    Me.Resources("KeyMainBrush") = Brushes.Red;
End Sub

还要注意,为了查看 UI 的变化,您应该在 Style 中将 KeyMainBrush 引用为 DynamicResource。 StaticResources 在编译时解析,修改后在运行时不会改变

<Application.Resources>
    <SolidColorBrush x:Name="BrushBG"  x:Key="KeyMainBrush" Color="White"/>
    <Style x:Name="styleGridBG" x:Key="GridBGColor" TargetType="Grid">
        <Setter Property="Background" Value="{DynamicResource KeyMainBrush}"/>
    </Style>
</Application.Resources>

同时 Style 可以设置为 StaticResource - 资源不会改变:

<Grid x:Name="grdColor" Style="{StaticResource GridBGColor}"

【讨论】:

  • 就是这样。非常感谢阿什
猜你喜欢
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多