使用c#重命名wpf中的控件

时间:2011-04-15 11:57:54

标签: c# wpf

如果我在Microsoft Blend 4中添加控件而没有为此控件设置名称,并且我想为其设置名称并在c#中使用它如何? 示例我在布局中使用Blend添加了按钮,但没有给它命名 我想在xaml

中使用c#而不是x:Name=""给它命名

3 个答案:

答案 0 :(得分:1)

在你的位置我会给LogicalTreeHelper.GetChildren(这个)一个机会。它将一个子集合返回给Window(这是Window的句柄)参考MSDN
从那里你可以尝试找到你的控制。

但我认为尝试重写控件(或查找其他组件)更容易,因此您可以在子项上使用名称。从一开始就是你的问题。

希望有帮助 Gorgen

答案 1 :(得分:0)

首先,为什么你想要这样做呢?

如果您没有设置名称,则无法轻松访问控件。但是,您可以通过与传递引用的其他控件或事件的关系来访问控件,例如加载的事件。

e.g。

private void Menu_Loaded(object sender, RoutedEventArgs e)
{
    (sender as Menu).Name = "MainMenu";
}

或者如果控件是另一个控件的子控件:

(ControlStack.Children[0] as Menu).Name = "MainMenu";

但我想不出有什么可以实现的......

您可能只想获得一个可以轻松存储在类成员中的对象的引用。在某些情况下,您还可以使用资源切片XAML。

e.g。

<local:SomethingIWouldLikeToReference x:Key="SomethingIWouldLikeToReference"/>
<local:UserControl x:Name="userControl">
    <Stuff>
        <MoreStuff Content="{StaticResource SomethingIWouldLikeToReference}"/>
    </Stuff>
</local:UserControl>
public MainWindow()
{
    InitializeComponent();
    MyReference = FindResource("SomethingIWouldLikeToReference") as SomethingIWouldLikeToReference;
}

答案 2 :(得分:0)

示例,如果我有ListView控件,我想用它来添加项目和删除项目 创建私有ListView并初始化它

ListView temp_control_List = new ListView()

然后从Blend中加载Eventhandler,这样它就会在VS中

private void ListView_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            temp_control_List = sender as ListView;
        }

现在,您可以从temp_control_List

添加和删除列表视图控件