小编Dav*_*mer的帖子

WPF MVVM焦点字段加载

我有一个View,它下面有一个TextBox和几个Button.当窗口加载时我希望它TextBox具有焦点.

如果我没有使用MVVM,我只会调用TextBox.Focus()Loaded事件.但是我的ViewModel不了解我的视图,那么如何在不将代码放入视图的代码隐藏的情况下完成此操作呢?

编辑:在阅读答案后,我决定将此代码放在xaml视图中

<DockPanel FocusManager.FocusedElement="{Binding ElementName=MessageTextBox}">    
    <TextBox Name="MessageTextBox" Text="{Binding Message}"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

如果这不是初始页面焦点,我可能会推荐Jon Galloway的答案,因为它可以从ViewModel控制.

c# wpf textbox focus mvvm

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

WPF中的自定义光标?

我想在WPF应用程序中使用图像或图标作为自定义光标.最好的方法是什么?

.net wpf image cursor

47
推荐指数
8
解决办法
5万
查看次数

WPF中的Width和ActualWidth有什么区别?

我目前正在使用PanelWPF中的s,我注意到关于WidthHeight属性,还有另外两个属性叫做ActualWidthActualHeight.

ActualWidth

获取此元素的呈现宽度.这是一个依赖属性.(继承自FrameworkElement.)

Width

获取或设置元素的宽度.这是一个依赖属性.(继承自FrameworkElement.)

参考:MSDN

任何人都可以指出两者之间的差异以及何时使用其中任何一个?

size wpf width actualwidth

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

如何在case语句中使用C#enum值的字符串值?

我已经将C#枚举定义为

public enum ORDER
{
    ...
    unknown,
    partial01,
    partial12,
    partial23,
}
Run Code Online (Sandbox Code Playgroud)

并且可以将其值用作字符串,如:

            string ss = ORDER.partial01.ToString();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在case语句中使用它时,它无法编译:

string value = ...
switch (value)
{
    case null:
        break;
    case "s":
        // OK
        break;
    case ORDER.partial01.ToString():
        // compiler throws "a constant value is expected"

        break;
  ...
Run Code Online (Sandbox Code Playgroud)

我认为枚举是常数.我该如何解决这个问题?

(我无法将值解析为枚举值,因为某些值超出了范围)

c# string enums

47
推荐指数
6
解决办法
6万
查看次数

如何通过ObjectDataProvider将ComboBox绑定到通用字典

我想用代码中的键/值数据填充ComboBox,我有这个:

XAML:

<Window x:Class="TestCombo234.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestCombo234"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider x:Key="Choices" ObjectType="{x:Type local:CollectionData}" MethodName="GetChoices"/>
    </Window.Resources>
    <StackPanel HorizontalAlignment="Left">
        <ComboBox ItemsSource="{Binding Source={StaticResource Choices}}"/>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码背后:

using System.Windows;
using System.Collections.Generic;

namespace TestCombo234
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }

    public static class CollectionData
    {
        public static Dictionary<int, string> GetChoices()
        {
            Dictionary<int, string> choices = new Dictionary<int, string>();
            choices.Add(1, "monthly");
            choices.Add(2, "quarterly");
            choices.Add(3, "biannually");
            choices.Add(4, "yearly");
            return choices;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这给了我这个:

alt text …

c# data-binding wpf xaml combobox

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

自定义TreeView以允许多选

内置的WPF TreeView控件不允许多选,就像ListBox一样.如何自定义TreeView以允许多重选择而无需重写.

wpf treeview multi-select

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

如何让DataTemplate.DataTrigger检查大于或小于?

以下DataTemplate.DataTrigger使年龄显示为红色,如果它等于 30.

如果年龄显示大于 30,如何使年龄显示为红色?

<DataTemplate DataType="{x:Type local:Customer}">
    <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="150"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/>
        <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/>
    </Grid>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Age}">
            <DataTrigger.Value>30</DataTrigger.Value>
            <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
        </DataTrigger>
    </DataTemplate.Triggers>

</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatrigger datatemplate

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

WPF中的AutoExpand树视图

有没有办法在WPF中自动扩展树视图中的所有节点?我搜索了,甚至没有在treeview属性中找到扩展函数.

谢谢

wpf treeview expand

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

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

WPF:如何使画布自动调整大小?

我希望我Canvas自动调整大小到其项目的大小,以便ScrollViewer滚动条具有正确的范围.这可以在XAML中完成吗?

<ScrollViewer HorizontalScrollBarVisibility="Auto" x:Name="_scrollViewer">
    <Grid x:Name ="_canvasGrid" Background="Yellow">
        <Canvas x:Name="_canvas" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Green"></Canvas>
        <Line IsHitTestVisible="False" .../>
    </Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,画布的大小始终为0,但它不会剪切其子元素.

.net wpf resize scrollviewer wpf-controls

43
推荐指数
5
解决办法
8万
查看次数