将 TextBlock 字段绑定到后端变量
Binding TextBlock field to backend variable
第一次真正使用 WPF - 我想我可以重新制作我在 Java 中做过的东西。
我正在尝试将弹出窗口上的 TextBlock 的文本值绑定到后端设置的内容,因此我可以使用一种处理程序方法在所述弹出窗口上显示任何消息。
我一直在尝试多种不同的路线,例如在 cs 中完全绑定它而不是 XAML 像这样:
<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
<Popup.Effect>
<BlurEffect/>
</Popup.Effect>
<Canvas Background="Azure">
<TextBlock Name="VerifTextBlock"/>
</Canvas>
</Popup>
<--CS-->
private void SmallPopupHandler(string text)
{
Binding binding = new("Text")
{
Source = text
};
VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
verif_popup.IsOpen = true;
}
但它不喜欢字符串不是 TextBlock 属性 的事实,我有点知道这行不通,但对我来说这似乎是最合乎逻辑的,因为它来自 swing。我似乎也没有办法将它投射到它,我也没有心情让我自己依赖 属性 rn...
我尝试的下一件事是将值绑定到 class 中的一个字段,但我只是遇到了一个 Whosebug 错误(哈哈很好)
<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
<Popup.Effect>
<BlurEffect/>
</Popup.Effect>
<Canvas Background="Azure">
<Canvas.DataContext>
<local:MainWindow/>
</Canvas.DataContext>
<TextBlock Name="VerifTextBlock" Text="{Binding Popup_message}"/>
</Canvas>
</Popup>
<--CS-->
public partial class MainWindow : Window
{
public string? Popup_message { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
我还尝试进行各种接口 class 以查看是否可以解决 Whosebug 错误(哈哈),但我相信您现在可能已经猜到了,那也没有用.. .
有点扯我的头发所以任何帮助将不胜感激!
提前致谢!
您可以按照@Clemens 的建议直接设置 VerifTextBlock
的 Text
属性:
private void SmallPopupHandler(string text)
{
VerifTextBlock.Text = text;
verif_popup.IsOpen = true;
}
如果您出于某种原因确实想要使用绑定,请删除绑定路径。这应该有效:
private void SmallPopupHandler(string text)
{
Binding binding = new()
{
Source = text
};
VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
verif_popup.IsOpen = true;
}
第一次真正使用 WPF - 我想我可以重新制作我在 Java 中做过的东西。 我正在尝试将弹出窗口上的 TextBlock 的文本值绑定到后端设置的内容,因此我可以使用一种处理程序方法在所述弹出窗口上显示任何消息。 我一直在尝试多种不同的路线,例如在 cs 中完全绑定它而不是 XAML 像这样:
<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
<Popup.Effect>
<BlurEffect/>
</Popup.Effect>
<Canvas Background="Azure">
<TextBlock Name="VerifTextBlock"/>
</Canvas>
</Popup>
<--CS-->
private void SmallPopupHandler(string text)
{
Binding binding = new("Text")
{
Source = text
};
VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
verif_popup.IsOpen = true;
}
但它不喜欢字符串不是 TextBlock 属性 的事实,我有点知道这行不通,但对我来说这似乎是最合乎逻辑的,因为它来自 swing。我似乎也没有办法将它投射到它,我也没有心情让我自己依赖 属性 rn... 我尝试的下一件事是将值绑定到 class 中的一个字段,但我只是遇到了一个 Whosebug 错误(哈哈很好)
<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
<Popup.Effect>
<BlurEffect/>
</Popup.Effect>
<Canvas Background="Azure">
<Canvas.DataContext>
<local:MainWindow/>
</Canvas.DataContext>
<TextBlock Name="VerifTextBlock" Text="{Binding Popup_message}"/>
</Canvas>
</Popup>
<--CS-->
public partial class MainWindow : Window
{
public string? Popup_message { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
我还尝试进行各种接口 class 以查看是否可以解决 Whosebug 错误(哈哈),但我相信您现在可能已经猜到了,那也没有用.. .
有点扯我的头发所以任何帮助将不胜感激! 提前致谢!
您可以按照@Clemens 的建议直接设置 VerifTextBlock
的 Text
属性:
private void SmallPopupHandler(string text)
{
VerifTextBlock.Text = text;
verif_popup.IsOpen = true;
}
如果您出于某种原因确实想要使用绑定,请删除绑定路径。这应该有效:
private void SmallPopupHandler(string text)
{
Binding binding = new()
{
Source = text
};
VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
verif_popup.IsOpen = true;
}