Tag: wpf

列表框Shift-Click多选锚点未正确设置

我正在努力解决这个问题。 我在WPF方面很有经验,但我从来没有见过这样的东西。 我有一个包含可选ListBoxItems的ListBox。 可以通过鼠标单击或使用向上/向下箭头选择列表中的项目。 我正在使用SelectionMode.Extended,所以我的列表支持多个选择。 问题:单击列表中的某个项目,然后按住Shift键并单击另一个项目会选择正确的项目范围,就像您期望的那样。 不幸的是,使用向上/向下箭头无法正常工作 – 相反,所选的范围似乎总是基于最后一个CLICKED项目,而不是使用箭头键选择的项目。 例如: [Item 1] <- Click this item [Item 2] <- Use the down arrow to select this item [Item 3] <- Shift-Click this item 您可能会选择第2项和第3项,而是选择所有项目(1,2和3)。 所有ListBox属性都具有正确的值(即使用箭头键更新SelectedItems属性),我唯一的问题似乎是ListBox如何在内部处理Shift-Click选择。 据我所知,我认为这与ListBox的“多选锚点”有关,可以通过鼠标点击设置,但不能用箭头键设置。 有没有人遇到并解决过这个问题? 有没有办法手动设置“多选锚”? 谢谢你的帮助! 克里斯

如何在WPF中修改DataGrid垂直滚动条的位置?

已解决: 请使用XAML代码,屏幕截图和说明查看下面我自己的答案。 标题这一点有点难,所以让我解释一下我的问题。 我有一个具有已定义高度的数据网格,因此会出现滚动条。 我想将垂直滚动条包含到排除标题的区域。 虽然它只滚动数据行而不是标题,但在视觉上它覆盖了右边的整个数据网格区域。 问题在于滚动条区域出现两个框(一个在上方和下方)。 我不知道如何摆脱它们或如何将滚动条包含到datagrid的主体。 我唯一能够弄清楚的(我不喜欢它的外观)是将DataGrid的背景设置为透明。 结果如下: 如你所见,滚动条令人讨厌。 然后,如果背景是透明的,那么水平滚动条和最后一行之间也存在间隙的问题: 还有一个解决方案可以摆脱这两个盒子的数据网格的背景颜色,使它们更加突出: http://social.msdn.microsoft.com/Forums/vstudio/en-US/9fc4252b-38b1-4369-8d76-b6c5ae1e4df5/how-to-remove-the-blank-space-above-the-verticalscroolbar-of-数据网格式,WPF?论坛= WPF 类似的解决方案可以在这里找到: 恼人的广场滚动条相遇 但是,它并没有摆脱滚动条在侧面笨拙地伸出的问题。 我测试的是将标题与正文分开并将正文放入垂直ScrollViewer,然后将标题和正文放入水平ScrollViewer中,以便它们可以水平滚动。 但是,正如您想象的那样,这不会很好,因为您必须向右滚动才能看到verticall滚动条。 我确信有一种方法可以让它在右边保持冷冻状态,但我还没弄清楚。 另一个问题是标题宽度必须与该列中任何单元格的最大可能宽度相匹配,或者所有内容都将关闭。 这是向右滚动时显示的结果: 我是新手来控制模板,所以我无法弄清楚这是否可行,因为我找不到合适的组件: 如果我给垂直滚动条左边的一个负边距(比如-6,0,0,0)和一个类似大小的填充到单元格块的右边(0,0,6,0),垂直滚动条在技术上应该向左移动。 我将继续尝试并尝试解决这个问题,除非有人为我提供答案(这将是非常棒的)。 编辑#1: 好吧,我取得了一些进展,并能够将滚动条的边距设置为(-17,0,0,0)。 17似乎是滚动条的宽度。 它的宽度似乎有一个特定的键: http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.verticalscrollbarwidthkey(v=vs.110).aspx 但我无法想出一种方法来将其作为XAML中边距的负偏移值插入。 在代码隐藏中做它并不难:但我宁愿把它全部保留在XAML中。 无论如何,这里是进度的截图和XAML代码部分: 这是XAML代码部分: 使更改成为可能的重要部分是在代码片段的中途,我为ScrollBar设置了Margin =“ – 17,0,0,0”。 我目前的问题是我无法确定哪个组件向左偏移17(通过添加边距或填充)。 到目前为止,我一直在弄乱他们所有人并且没有运气。 我会在得到它后立即更新,除非有人在我之前说出来。 就目前而言,滚动条将覆盖最后一列中的任何内容,直到我修复偏移量。 编辑#2: 请参阅上面更新的XAML代码。 我所做的是向ScrollContentPresenter添加Margin =“0,0,17,0”。 一个副作用效果,我可以完全忍受,是一个事实,也抵消了标题,但你看不到,直到你一直向右滚动。 它仅影响最后一列的标题,因为ScrollContentPresenter也将其偏移…奇怪的是,因为有一个DataGridColumnHeadersPresenter,但它独立工作……所以,我将继续处理它。 不幸的是,ScrollContentPresenter没有填充,这就像魅力一样。 所以,现在我必须弄清楚如何填充它,而不是设置边距,或找出不同的方法。 类似的方法是将水平ScrollBar(即第二个网格中的一个)的边距设置为0,0,-17,0。 它将向右移动17个单位。 然后,将DataGridColumnHeaderPresenter的边距设置为0,0,-17,0。 它将向右移动17个单位。 […]

使用GetLineStartPosition获取WPF RichTextBox中一行的结尾

一点背景。 我希望能够在WPF RichTextBox中处理插入符号所在行的文本。 请参阅我之前关于TextPointer类的问题: 如何在WPF RichTextBox中跟踪TextPointer? 。 我知道如何通过使用GetLineStartPosition并将0作为参数来获取当前行开头的TextPointer,但现在想要在行的末尾获取TextPointer。 在我之前的问题中建议使用GetLineStartPosition方法。 如果有人可以解释一下GetLineStartPosition如何处理行结束指针,我将不胜感激。 在此先感谢您的帮助。

WPF:无法在没有可怕视觉效果的情况下调整窗口大小

我正在尝试学习WPF(我在WinForms上工作很多但我对WPF不熟悉)并且在调整窗口大小时遇到​​了问题。 有可怕的视觉效果。 这是预期的: http : //data.imagup.com/12/1130871175.jpg 这是我得到的: http : //data.imagup.com/12/1130871187.jpg或http://sofzh.miximages.com/c%23/1130871194.jpg 我没有做任何特别的事情,即使在resize时空窗口也无法正确渲染! 窗口最大化时我没有任何问题。 有什么问题 ? Windows 7 32位/ .Net 3.5 / Raden HD5850

InteropBitmap到BitmapImage

我正在尝试将Bitmap (SystemIcons.Question)转换为BitmapImage以便我可以在WPF图像控件中使用它。 我有以下方法将其转换为BitmapSource ,但它返回一个InteropBitmapImage ,现在的问题是如何将其转换为BitmapImage 。 直接演员似乎不起作用。 有谁知道怎么做? 码: public BitmapSource ConvertToBitmapSource() { int width = SystemIcons.Question.Width; int height = SystemIcons.Question.Height; object a = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(SystemIcons.Question.ToBitmap().GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(width, height)); return (BitmapSource)a; } 返回BitmapImage的属性:(绑定到我的图像控件) public BitmapImage QuestionIcon { get { return (BitmapImage)ConvertToBitmapSource(); } }

WPF Control的嵌套属性的数据绑定

我正在尝试使用一些嵌套属性来开发用户控件,这些属性允许使用数据绑定来设置它。 例如,我有这样的事情: // Top level control public class MyControl : Control { public string TopLevelTestProperty { get { return (string)GetValue(TopLevelTestPropertyProperty); } set { SetValue(TopLevelTestPropertyProperty, value); } } public static readonly DependencyProperty TopLevelTestPropertyProperty = DependencyProperty.Register(“TopLevelTestProperty”, typeof(string), typeof (MyControl), new UIPropertyMetadata(“”)); // This property contains nested object public MyNestedType NestedObject { get { return (MyNestedType)GetValue(NestedObjectProperty); } set […]

如何将(静态)字典绑定到标签?

我有一个静态字典 class X { static Dictionary MyDict {get { … }} } 此词典包含我想在网格控件中显示的数据: 1.)我不知道如何访问(在xaml中)字典 2.)我想将指定键的值绑定到Label的Content-Property。 这该怎么做?

使一些DataGrid单元格跨越多列

好的,我已经搜索了很长时间来解决这个问题。 我正在为WPF DataGrids开发简单的打印系统,并设法使用DataTable打印具有统一单元格位置的表格并将其设置为DataGrid的ItemSource。 但是,我需要一些行只包含一个单元格 (您可以将其视为表格中的“行组标题”)。 所以,因为我还没有找到任何关于跨越多列的DataTable单元格(如果可以这样做,知道如何做是件好事),我想我必须手动向DataGrid添加行,并解决类似的问题。这个: 使用所需的列创建新的DataGrid 逐行添加行,设置跨越或不跨越行的DataGridCellPanel 第二点是我遇到问题的地方(如果是的话,就是这样)。 我需要向DataGrid 添加行 ,该DataGrid使用简单的字符串数组作为单元格数据 (数组中的索引应该是单元格索引)。 有没有一种简单的方法来做这样的事情?

在WPF中构建CAD程序

– 在WPF中构建CAD程序: 我想构建一个一次有10000个LINE对象的CAD程序。 我正在使用LineGeomery类绘制添加到Canvas线条。 我已经实现了Zoom和Pan ,到目前为止性能非常好。 只有一个主要的失望: 线条的Thickness在缩放时缩放。 我试图将线的Thickness属性Bind到一个因子以保持它们不变,这可以工作,但在缩放时会显着降低性能。 在MouseWheel上清除和绘制具有新厚度的新线条也是MouseWheel 。 这个也降低了性能并且在当前方法中不实用。 – 现在我有什么解决方案? 坚持使用当前方法并忽略厚度的变化 在GDI +中完成整个工作 WPF中的主机GDI 使用WPF Viewport3D(LineThickness会在那里不变吗?) – 其他解决方案? 你会采取什么其他途径。 我是WPF和编程的新手,我很想学习。 更新: 这就是我现在正在做的方式。 我使用Pen a Brushes在可视层上绘制3000条线。 然后在MouseWheel事件上,我重新绘制所有具有更新厚度的线。 此外,我不会向用户显示其余的线,直到他缩放,因此我只在每个MouseWheel事件中创建10000行中的3000行。

如何从XAML中的CLR命名空间映射类型而不是声明它的汇编?

在XAML中,我想使用来自两个不同程序集的类型,每个程序集都有自己的命名空间。 我不想在xmlns:=””属性中显式声明名称空间,而是使用[XmlnsDefinition]程序集属性将URI映射到这些类型的名称空间。 其中一个程序集本身与WPF无关,所以我想避免它引用与WPF相关的程序集,特别是System.Xaml.dll程序集,如果该程序集使用[XmlnsDefinition]属性。 我有一个像这样组织的Visual Studio解决方案: Gu.Units.sln Gu.Units.csproj //这里没有对System.Xaml的引用 Gu.Units.Wpf.csproj //引用Gu.Units和System.Xaml 在Gu.Units.Wpf.csproj我有这个映射: [assembly: XmlnsDefinition(“http://Gu.com/Units”, clrNamespace: “Gu.Units”, AssemblyName = “Gu.Units”)] [assembly: XmlnsDefinition(“http://Gu.com/Units”, clrNamespace: “Gu.Units.Wpf”, AssemblyName = “Gu.Units.Wpf”)] [assembly: XmlnsPrefix(“http://Gu.com/Units”, “units”)] 我试图在XAML中使用它,如下所示: 但由于某种原因,名称空间Gu.Units似乎被忽略了。 也就是说,它不包含在URI http://Gu.com/Units标识的XML命名空间中。 相反,我得到: 名称“LengthUnit”在命名空间“ http://Gu.com/Units ”中不存在。 XAML中的显式名称空间声明 – 即具有xmlns:units=”clr-namespace:Gu.Units;assembly=Gu.Units” – 工作正常,但我也想避免这种情况。 有没有办法,我可以让我的Gu.Units.Wpf.dll程序集提供必要的[XmlnsDefinition]属性来映射Gu.Units.Wpf.dll程序[XmlnsDefinition]的命名空间,以便后者本身不需要对System.Xaml.dll的引用System.Xaml.dll , System.Xaml.dll没有任何特定于XAML的代码?