我有一个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控制.
我目前正在使用PanelWPF中的s,我注意到关于Width和Height属性,还有另外两个属性叫做ActualWidth和ActualHeight.
ActualWidth获取此元素的呈现宽度.这是一个依赖属性.(继承自FrameworkElement.)
Width获取或设置元素的宽度.这是一个依赖属性.(继承自FrameworkElement.)
参考:MSDN
任何人都可以指出两者之间的差异以及何时使用其中任何一个?
我已经将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)
我认为枚举是常数.我该如何解决这个问题?
(我无法将值解析为枚举值,因为某些值超出了范围)
我想用代码中的键/值数据填充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)
但这给了我这个:
内置的WPF TreeView控件不允许多选,就像ListBox一样.如何自定义TreeView以允许多重选择而无需重写.
以下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中自动扩展树视图中的所有节点?我搜索了,甚至没有在treeview属性中找到扩展函数.
谢谢
我希望我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,但它不会剪切其子元素.
wpf ×9
c# ×3
.net ×2
treeview ×2
xaml ×2
actualwidth ×1
combobox ×1
cursor ×1
data-binding ×1
datatemplate ×1
datatrigger ×1
enums ×1
expand ×1
focus ×1
image ×1
mouseevent ×1
multi-select ×1
mvvm ×1
resize ×1
scrollviewer ×1
size ×1
string ×1
textbox ×1
width ×1
wpf-controls ×1