Questions tagged «wpf»

Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。

3
如何通过数据绑定设置WPF超链接的文本?
在WPF中,我想创建一个导航到对象详细信息的超链接,并且希望该超链接的文本成为该对象的名称。现在,我有这个: <TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">Object Name</Hyperlink></TextBlock> 但我希望将“对象名称”绑定到对象的实际名称。我想做这样的事情: <TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}" Text="{Binding Path=Name}"/></TextBlock> 但是,Hyperlink类没有适合于数据绑定的text或content属性(即,依赖项属性)。 有任何想法吗?

9
WPF中的键盘快捷键
我知道使用_而不是&,但是我正在查看所有Ctrl+类型的快捷方式。 Ctrl+ Z表示撤消,Ctrl+ S表示保存等。 是否有在WPF应用程序中实现这些的“标准”方法?还是自己动手将它们连接到任何命令/控件的情况?

6
从十六进制颜色值创建SolidColorBrush
我想从十六进制值(例如#ffaacc)创建SolidColorBrush。我怎样才能做到这一点? 在MSDN上,我得到了: SolidColorBrush mySolidColorBrush = new SolidColorBrush(); mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255); 所以我写了(考虑到我的方法将颜色接收为#ffaacc): Color.FromRgb( Convert.ToInt32(color.Substring(1, 2), 16), Convert.ToInt32(color.Substring(3, 2), 16), Convert.ToInt32(color.Substring(5, 2), 16)); 但这给了错误 The best overloaded method match for 'System.Windows.Media.Color.FromRgb(byte, byte, byte)' has some invalid arguments 另外还有3个错误,例如: Cannot convert int to byte. 但是,MSDN示例如何工作?
129 wpf 

3
WPF:带滚动条的ItemsControl(ScrollViewer)
我跟着这个关于如何将滚动条添加到一个ItemsControl小“教程”,和它的作品在设计视图,而不是当我编译和执行程序(仅前几个项目出现,并没有滚动条来查看更多-甚至当VerticalScrollbarVisibility设置为“ Visible”而不是“ Auto”时)。 关于如何解决这个问题的任何想法? 这是我用来显示项目的代码(通常我使用数据绑定,但是要在我的Designer中查看这些项目,则手动添加了它们): <ItemsControl x:Name="itemCtrl" Style="{DynamicResource UsersControlStyle}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top"> </StackPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> </ItemsControl> 这是我的模板: <Style x:Key="UsersControlStyle" TargetType="{x:Type ItemsControl}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ItemsControl}"> <Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> …

7
WPF中没有Main()?
我是编程方面的初学者,但是我确定通用规则之一是程序以Main()开头。创建WPF项目时看不到一个。是Main()只是在WPF中以不同的方式命名吗?
128 c#  wpf  c#-4.0  main 

8
如何在DataGrid中设置所选行的颜色
DataGrid中选定行的默认背景颜色太暗,以至于我无法读取它。无论如何有覆盖它吗? 试过这个 <dg:DataGrid.RowStyle> <Style TargetType="{x:Type dg:DataGridRow}"> <Style.Triggers> <Trigger Property="IsSelected" Value="True" > <Setter Property="Background" Value="Gainsboro" /> </Trigger> </Style.Triggers> </Style> </dg:DataGrid.RowStyle> 但是还是没有
127 c#  wpf  xaml  datagrid 

3
在渲染时间和性能方面,Panel最有效的顺序是什么?
很多时候,一个以上的面板都适合我想要的布局,但是我知道不同面板类型的渲染时间有所不同。 例如,MSDN指出 相对简单的Panel(例如)Canvas比复杂的Panel(例如)具有明显更好的性能Grid。 那么就渲染时间和性能而言,WPF面板最有效的顺序是什么? WPF面板: Canvas DockPanel Grid UniformGrid StackPanel WrapPanel VirtualizingPanel / VirtualizingStackPanel 我相当确定我在网上某个地方看到了此列表,但现在找不到。 我正在寻找的理想答案是按顺序提供面板列表,以使它们以最快的速度呈现。我理解孩子的数量是在面板的效率有多高是一个很大的因素,所以对于这个问题起见,假设每个小组只有一个Label/ TextBox对。 此外,我还希望列出一些例外情况,例如,在某些条件下,某些小组的表现要优于其他小组。 更新资料 根据以下公认的答案进行总结,面板性能取决于子项的数量和布局,但是总的来说,从最快到最慢的列表是: Canvas StackPanel WrapPanel DockPanel Grid 另外,如果有很多项目不总是显示在屏幕上,则应始终使用VirtualizingPanel/ VirtualizingStackPanel。 我强烈建议您在从列表中选择一项之前,阅读以下接受的答案以获取更多详细信息。


5
设置wpf应用程序的图标(VS 08)
在进一步介绍之前,我将提及以下几种解决方案: 如何在Visual Studio 2008中为我的应用程序设置图标? 从VS 05中的资源设置应用程序图标 我正在尝试为我的应用程序设置一个图标。 AFAIK,我可能需要3张图像? 1图片是单击.exe时资源管理器中的实际图像(exe的缩略图) 左上角有1张图像(小)(16 x 16?不确定吗?) 开始菜单停靠栏中的1张图片,位于应用程序左侧(也许是32x32?还是不确定) 这样很好。 现在,我选择了一个图标。在以上情况之一下如何使用它? 我尝试将其添加到资源中,似乎没有任何反应。在第一个SO解决方案之后, “首先进入资源视图(从菜单:视图->其他窗口->资源视图)。然后在资源视图中浏览资源(如果有)。如果已经有图标类型的资源(由Visual Studio添加),则打开并编辑它。否则,右键单击并选择“添加资源”,然后添加一个新图标。” 资源视图为空,我无法右键单击该视图。 如果右键单击解决方案>属性>资源>我可以添加图标图像,但是它不会显示在上面列出的任何位置。(或我能看到的任何地方) 1)如何为WPF应用程序设置应用程序图标?

30
该名称在XAML中的命名空间错误中不存在
在VB.NET WPF应用程序上使用VS2012。我有一个用于学习WPF的简单MusicPlayer教程应用程序。我正在逐步将本教程的C#版本转换为VB.NET。 它在应用程序中有2个类,它们都在同一个命名空间下。我可以在XAML中引用名称空间,但是当我尝试在XAML中引用类对象时,出现错误,并且无法编译。 奇怪的是,IntelliSense既可以通过xmlns:c =标记引用名称空间,也可以在使用键入类对象时很好地工作, <c: 但是该对象带有下划线,并且在尝试在设计器中构建或工作时会生成错误。 .vb类文件位于名为\ Controls的文件夹中。主项目根命名空间特意留为空白。该类是这样编码的... Namespace MusicPlayer.Controls Public Class UpdatingMediaElement .... code here End Public End Namespace xaml看起来像这样 (<Window >标记中定义的命名空间 xmlns:c="clr-namespace:MusicPlayer.Controls" (在中定义的对象<Grid>) <c:UpdatingMediaElement Name="MyMediaElement" /> (显示错误)名称空间“ clr-namespace:MusicPlayer.Controls”中不存在名称“ UpdatingMediaElement”。 不确定出什么问题或如何解决?

3
虚拟化ItemsControl?
我有一个ItemsControl包含要虚拟化的数据的列表,但是VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于ItemsControl。 确实是这样吗,还是我不知道有另一种方法? 为了测试,我一直在使用以下代码块: <ItemsControl ItemsSource="{Binding Path=AccountViews.Tables[0]}" VirtualizingStackPanel.IsVirtualizing="True"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Initialized="TextBlock_Initialized" Margin="5,50,5,50" Text="{Binding Path=Name}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> 如果将更ItemsControl改为a ListBox,则可以看到该Initialized事件只运行了几次(巨大的利润只是为了让我只需要查看一些记录),但是ItemsControl每一项都被初始化了。 我尝试将设置ItemsControlPanelTemplate为a,VirtualizingStackPanel但这似乎无济于事。



6
将只读GUI属性推回ViewModel中
我想编写一个ViewModel,它总是从View知道某些只读依赖项属性的当前状态。 具体来说,我的GUI包含FlowDocumentPageViewer,它一次显示FlowDocument中的一页。FlowDocumentPageViewer公开了两个名为CanGoToPreviousPage和CanGoToNextPage的只读依赖项属性。我希望我的ViewModel始终知道这两个View属性的值。 我认为我可以使用OneWayToSource数据绑定来做到这一点: <FlowDocumentPageViewer CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...> 如果允许这样做,那将是完美的:每当FlowDocumentPageViewer的CanGoToNextPage属性发生更改时,新值将被下推到ViewModel的NextPageAvailable属性中,这正是我想要的。 不幸的是,这无法编译:我收到一条错误消息,提示“ CanGoToPreviousPage”属性为只读属性,无法从标记中进行设置。显然,只读属性不支持任何类型的数据绑定,甚至不支持相对于该属性为只读的数据绑定。 我可以将ViewModel的属性设置为DependencyProperties,并进行另一种方式的OneWay绑定,但是我对关注分离冲突并不感到疯狂(ViewModel需要引用View,而MVVM数据绑定应该避免该视图)。 FlowDocumentPageViewer不会公开CanGoToNextPageChanged事件,而且我不知道从DependencyProperty获取更改通知的任何好方法,而没有创建另一个DependencyProperty绑定到该事件的方法,这似乎是过分的。 如何使ViewModel知道视图的只读属性的更改?

8
如何将WPF DataGrid绑定到可变数量的列?
我的WPF应用程序生成的数据集每次可能具有不同的列数。输出中包括对将用于应用格式设置的每一列的描述。输出的简化版本可能类似于: class Data { IList<ColumnDescription> ColumnDescriptions { get; set; } string[][] Rows { get; set; } } 此类设置为WPF DataGrid上的DataContext,但实际上是通过编程方式创建的: for (int i = 0; i < data.ColumnDescriptions.Count; i++) { dataGrid.Columns.Add(new DataGridTextColumn { Header = data.ColumnDescriptions[i].Name, Binding = new Binding(string.Format("[{0}]", i)) }); } 有什么方法可以用XAML文件中的数据绑定替换此代码吗?
124 c#  wpf  xaml  data-binding  datagrid 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.