我目前正在玩wpf,这是我第一次遇到一些问题。我无法弄清楚如何引用wpf标签元素。我将我的标签名称更改为“label1”并尝试在我的c#代码中引用它,但是没有结果只是错误,例如。
XAML
<Controls:MetroWindow x:Class="Rustomatic.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Rustomatic"
Height="350"
Width="525" >
<Grid>
<Label x:Name="label1" Content="Label" HorizontalAlignment="Left" Margin="229,128,0,0" VerticalAlignment="Top"/>
</Grid>
<Window.InputBindings>
<KeyBinding Gesture="F5" Command="{Binding Hit}" />
</Window.InputBindings>
C#
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MahApps.Metro.Controls;
namespace Rustomatic
{
public partial class MainWindow : MetroWindow
{
label1.content = "hi";
}
public class Hit
{
}
}
请小心翼翼地说我曾经是C#的中间人,但我在几年内没有使用它。
答案 0 :(得分:5)
您使用x:Name
为xaml中的元素命名,这将导致它们在设计器生成的cs文件中公开命名(它由xaml构成),您可以像访问它一样访问它们过去在winforms。
这段代码没有任何意义:
public partial class MainWindow : MetroWindow
{
label1.content = "hi";
}
您无法像这样访问label1
。您必须在属性getter / setter或方法中执行此操作:
public partial class MainWindow : MetroWindow
{
public void SomeMethod()
{
label1.Content = "hi";
}
}
此外,不要删除构造函数InitializeComponent()
,否则您的窗口将不会被初始化。这很重要(除非您在向项目添加新窗口时为部分类添加部分类以及):
public MainWindow()
{
InitializeComponent();
}