我有一个列表框,其中包含项目的datatemplate.问题是只需单击项目的任何位置即可选择项目.我必须点击一个特定的子元素才能实际工作.
我的项目有图像和文本块.如果我将鼠标悬停在图像或文本块上,我实际上会看到悬停效果.如果我将鼠标悬停在项目的任何"空"空间上,则没有悬停效果(当我点击那里时没有选择).
示例图片:http://i33.tinypic.com/wvtleg.png
如果我点击(或悬停)实际文本或图像它工作正常,但如果我将鼠标悬停在空白区域(我在它周围画了一条红线:))列表框没有响应.
如何让列表框悬停/单击以响应单击项目空间中的任何位置?
为了完整性,这里是我的列表框+模板:
<ListBox Grid.Row="1"
ItemsSource="{Binding Path=CreatableOutputWindows, Mode=OneWay}" Height="Auto"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Margin="8,8,8,8"
Name="listBox1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="84"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Margin="5" BorderBrush="Black" BorderThickness="2">
<Image Source="{Binding Path=Image}" Stretch="Fill" Width="80" Height="50" />
</Border>
<StackPanel Grid.Column="1" Margin="5">
<StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold">
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud) 我将ItemsControl与Canvas绑定为ItemsPanelTemplate到ObservableCollection.
我想使用在WPF中拖动图像中发布的DraggableExtender使项目可 拖动 (我不想使用转换 - 我需要使用Canvas Left和Top属性)
它被定义为:
<ItemsControl ItemsSource="{Binding Path=Nodes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Views:NodeView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Utilities:DraggableExtender.CanDrag" Value="True" />
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
DraggableExtender需要元素的父元素为Canvas,但我元素的父元素(contentpresenter)为null,因此拖动不起作用.
所以显而易见的问题是 - 我做错了什么?
我正在使用WPF扩展工具包(http://wpftoolkit.codeplex.com/).
它有一个很好的NumericUpDown控件,我想使用它,但在内部它使用双精度 - 这意味着它使用double.MinValue和double.MaxValue.
我想使用相同的控件,但我需要一个通用版本 - 对于int它需要使用int.MaxValue/MinValue,浮动float.MaxValue/MinValue等(我想你明白:))
所以我想将NumericUpDown复制到GNumericUpDown,其中T将是Type ..但这不起作用,因为泛型Type没有MinValue/MaxValue.通常我会使用'where'子句来指定基类型,但是这不能用作afaik,没有定义'MinValue'和'MaxValue'的通用接口.
有没有办法用泛型来解决这个问题,还是我真的需要复制/粘贴/搜索并替换每种类型的原始NumericUpDown?
我已经玩了几个月的WPF,我非常喜欢它.但是我没有得到的一件事就是为什么MS不会通过提供基本控制来帮助开发人员做更多的努力,而且我需要把它放在胸前:)
例如,我认为大多数应用程序需要让你编辑一些属性 - 用于配置或其他任何东西.在proprety-grid编辑器中最常用的类型是什么?
....等等.
那么,为什么甚至没有像控件那样简单的编辑数字呢?就像一个通用的NumericUpDown控件,允许你键入数字(没有文本,没有粘贴无效输入)或根据一些给定的规则(十进制,浮点,最小值/最大值)上下旋转它们?为什么没有通用的颜色选择器,所以人们在每个应用程序中都能获得相同的用户体验?为什么没有标准的SearchTextBox,BreadCrumb控件或者用户在过去10年习惯的其他标准控件类型的实现?
(..但至少他们DID有时间实现通用的闪屏 - 因为每个人都知道这会大大提高用户的工作效率......)
众所周知的理想总是为人们提供不同应用程序的相同用户体验.因此,即使其中一些控件很容易制作 - 最好在不同的应用程序上安装一个版本.
我看到整个互联网上的人都试图一遍又一遍地做同样的事情.好的,所以MS在Codeplex上启动了一个WPF Toolkit项目,试图实现一些控制,但只是半心半意,现在已经完全死了(路线图的最新更新可追溯到2009年3月21日).
结果是很多人启动WPF项目最终会花费大量时间来试图找出如何创建一些通用控件并让他们感到非常沮丧.
不是口号"开发人员,开发人员,开发人员!" ..?
/兰特
我有一个类Node这样的类:
class Node {
IEnumerable<Node> inputs;
}
Run Code Online (Sandbox Code Playgroud)
这基本上定义了一个简单的图形.我想将我的图形序列化为一个人类可读的形式,所以通常我会说xml是要走的路.但是XML并不是用循环依赖关系制作的:)
那么 - 我的图表序列化的最佳方法是什么?
我可以想到几个方面:
但我认为其他人之前必须遇到同样的问题,所以可能会有更好的选择.有谁知道一个坚实的方法?
由于GLSL没有包含文件选项,我试图通过使用"#pragma include"解析器来添加它.(我想要这个,因为我有一些通用的方法,我只想实现一次,但可能会在许多不同的着色器中使用,比如Ken Perlin的平滑步骤)
解析着色器文件以获取包含的文件可以正常工作.但是当使用多个源文件设置ShaderSource时,我总是遇到问题; 因为我的主着色器通常以"#version 330"开头而且#version-line总是必须是着色器中的第一行,所以我只能将我的主文件添加为传递给glShadersource的字符串数组中的第一行,之后所有包含的文件.但是我的主文件不能使用那些包含文件中实现的任何函数,因为它们基本上会在我的主文件之后连接,因此编译器抱怨它不知道我的主文件正在使用的函数.
我能想到让它工作的唯一方法是读取主文件,解析include pragma,然后将该pragma行替换为要包含的文件的文件内容(递归地将相同的方法应用于所有包含的可能包含其他文件的文件) - 但这意味着编译错误中的编号将不再与主文件的真实编号相匹配.
是否有人为GLSL设置了某种"包含"功能,并保留了亚麻布?如果是这样 - 怎么样?
我有一个WPF画布,我可以缩放,滚动等等.现在我想在其上绘制(平铺)网格线 - 最好取决于比例尺,这意味着当你缩小时,旧的网格线逐渐消失,新的(更大的比例,但由于变焦看似相同)网格线渐渐消失.
我听说有些人大喊"Tilebrush!",但我不能谷歌任何一个例子.
任何人都可以指出我正确的方向 - 不仅仅是瓷砖刷的MSDN页面,还有如何在我的可缩放画布上有效地绘制网格线?:)
我正在从XML文件中读取字符串值,我需要将其转换为某种(自定义)类型.
在我的情况下,我有一个InputPatch类,指定所需的类型[ValueType],所以我需要将字符串转换为inputPatch.ValueType.
我想要做 :
inputPatch.DefaultValue = Convert.ChangeType(
defaultValueAttribute.Value, inputPatch.ValueType,
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
但对于我的BitmapFilename类(它有一个字符串构造函数),结果是
从"System.String"到"ProjectX.Node.BitmapFilename"的无效转换.
那么,我怎样才能将Convert转换为我自己的BitmapFilename类?