小编Dav*_*mer的帖子

WPF如何动态创建文本框并在按钮单击时找到文本框?

我使用以下代码创建动态TextBoxButton动态:

Button btnClickMe = new Button();
btnClickMe.Content = "Click Me";
btnClickMe.Name = "btnClickMe";
btnClickMe.Click += new RoutedEventHandler(this.CallMeClick);

someStackPanel.Childern.Add(btnClickMe);

TextBox txtNumber = new TextBox();
txtNumber.Name = "txtNumber";
txtNumber.Text = "1776";

someStackPanel.Childern.Add(txtNumber);
Run Code Online (Sandbox Code Playgroud)

我联系了Click Me按钮的点击事件.单击我按钮甚至被正确触发.但是我找不到TextBox我动态输入的内容.

这是我点击我的活动:

protected void ClickMeClick(object sender, RoutedEventArgs e)
{
    // Find the phone number
    TextBox txtNumber = this.someStackPanel.FindName("txtNumber") as TextBox;

    if (txtNumber != null)
    {
        string message = string.Format("The number is {0}", txtNumber.Text);

        MessageBox.Show(message);    
    }
    else
    {
        MessageBox.Show("Textbox is null");
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf textbox mouseevent

17
推荐指数
3
解决办法
5万
查看次数

在WPF中,如何在右键单击光标下选择树视图项?

在WPF中,当我右键单击树视图项时,我希望在显示上下文菜单之前选择/激活它.

这听起来很简单,但是包含hierachicalDataTemplate会使事情变得复杂.

我有以下树视图:

<TreeView 
            x:Name="trv"
            ContextMenu="{StaticResource contextMenu}"
            ItemTemplate="{StaticResource treeHierarchicalDataTemplate}"
            ItemsSource="{Binding Source={StaticResource meetingItems}}" >

            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="trv_PreviewMouseRightButtonDown"/>
                    <Setter Property="IsExpanded" Value="True"></Setter>
                </Style>
            </TreeView.ItemContainerStyle>
        </TreeView>
Run Code Online (Sandbox Code Playgroud)

这是我的事件处理程序......

private void trv_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem item = sender as TreeViewItem;
    if (item != null)
    {
        item.Focus();
        e.Handled = true;
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意我如何添加上面的EventSetter.这个ALMOST有效.但它只选择根级树视图节点(即我右键单击的节点的根父节点).这可能是因为我的分层数据模板?此模板可以包含相同类型的子项.

这是我的分层数据模板......

<HierarchicalDataTemplate x:Key="treeHierarchicalDataTemplate" 
                          ItemsSource="{Binding Path=ChildMeetingItems}">
    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Red}" Value="True">
            <Setter TargetName="img" Property="Image.Source" Value="pack://siteoforigin:,,,/images/bookRed.png"></Setter>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
    <StackPanel 
        x:Name="treeViewItemPanel"
        Background="Transparent"
        Orientation="Horizontal">
        <Image Width="16" Height="16"  x:Name="img" Margin="0,0,4,0" Source="pack://siteoforigin:,,,/images/bookGreen.png"></Image>
        <TextBlock Foreground="DarkGray" …
Run Code Online (Sandbox Code Playgroud)

wpf treeview treeviewitem

17
推荐指数
2
解决办法
2万
查看次数

强制在ListView中调整GridView列的大小

我有一个ListViewWPF控件GridView.GridView当列的内容发生变化时,我想调整列的大小.

我有几个不同的数据集但是当我从一个更改为另一个时,每列的大小适合以前的数据.我想动态更新.我怎样才能做到这一点?

.net c# wpf listview

17
推荐指数
3
解决办法
1万
查看次数

WPF相当于margin-top?

你如何在WPF中相当于css的margin-top?

我有一个图像,我想在顶部添加一个边距,但我似乎可以开始工作的是边距,这会影响图像的每一面.

wpf margin

17
推荐指数
2
解决办法
2万
查看次数

覆盖WPF中的DefaultStyle

任何人都可以解释OverridesDefaultStyle实际对控件做了什么.我读过MSDN,但我不明白.

wpf styles

17
推荐指数
1
解决办法
1万
查看次数

在WPF中使用ListBox,VirtualizingStackPanel和Smooth Scrolling

我有一个ListBox可能有很多行的模板化DB记录,包括一个Image,绑定到一个ObservableCollection<MyItem>.有时收藏可以容纳数千件物品.

性能很好,但滚动是默认的跳跃行为.我希望它有平滑的滚动,所以我取消选中ScrollViewer.CanContentScroll.

现在我有平滑的滚动,但性能很可怕:数据在一个单独的线程中检索,并且线程快速完成,但结果显示在中需要10-20秒ListBox.我假设这是因为取消选中ScrollViewer.CanContentScroll将底层更改VirtualizingStackPanel为常规StackPanel,因此在显示结果之前加载整个集合.

所以我的问题是:如何在不牺牲VirtualizingStackPanel行为和性能的情况下保持平滑滚动?

wpf performance scroll listbox virtualizingstackpanel

17
推荐指数
2
解决办法
2万
查看次数

检测用户在WPF中按F10

我的WPF应用程序具有由功能键(F1- F12)触发的行为.

我的代码是这样的:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.Key)
    {
        case Key.F1:
        ...
        case Key.F2:
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于所有F键,除了F10.调试时,我发现e.Key == Key.System当用户按下时F10.

在枚举定义,F10 = 99并且System = 156,这样我就可以排除它是一个重复的枚举值(像PageDown = Next = 20).

那么,如何判断用户何时按下F10

Key.System相反,检查是否安全?这感觉有点脏 - 可能是Key.System因为某些其他键被按下而导致的?或者是否有某些设置将F10报告作为Key.F10

wpf keyboard-events

17
推荐指数
1
解决办法
1万
查看次数

mvvm如何使列表视图自动滚动到列表视图中的新项目

我正在使用MVVM模式,我有一个创建新视图的视图ViewModel,在用户单击保存后,此视图关闭并打开一个单独的视图,其中显示了一组视图模型ListView.

ListView是按字母顺序排序的,因此新的ViewModel可能会出现在ListBox用户无法立即看到的底部.

我的问题是如何让视图自动滚动到新添加的项目?

我想它会使用附加的行为和ScrollIntoView事件ListView,但是我需要从GridView我不确定的事件中捕获哪个事件.

干杯

c# wpf listview scroll mvvm

17
推荐指数
1
解决办法
2万
查看次数

app.xaml中的datatemplate在没有任何样式的情况下没有被拾取?

我在app.xaml中有一个DataTemplate,它将视图绑定到viewmodel.

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

如果没有样式,则不会应用上述模板.我放风格的那一刻,像...

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="20"></Setter>
    </Style>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

datatemplate被拿起并产生预期的结果......我不确定那里发生了什么......有人可以澄清一下吗?

谢谢.

wpf styles datatemplate app.xaml

17
推荐指数
2
解决办法
4285
查看次数

如何在WPF中为用户控件创建用户定义(新)事件?一个小例子

我有一个usercontrol,我在其中使用一个画布,在那个画布中有一个矩形,所以我想创建一个用户控件(画布+矩形)的点击事件,我想在主窗口中使用..问题是我想为该用户控件创建一个新的单击事件.所以如何做到这一点,请显示一些示例或显示此特定的代码

wpf events user-controls

17
推荐指数
1
解决办法
2万
查看次数