我有一个ItemsControl,它在Canvas上的散点图中绘制了数千个椭圆.我的问题是,如果我将椭圆定位在坐标(4,6)处,高度和宽度为10.椭圆的左上角是(4,6),形状向下和向右延伸.
我想做的是将椭圆中心放在XAML中的特定坐标上,而不必在我的ViewModel层中使用调整.
这是我的图表的工作UserControl:
<Grid>
<ItemsControl ItemsSource="{Binding State.Data}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="False"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Fill="Red" VerticalAlignment="Center" HorizontalAlignment="Center" Width="10" Height="20"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
除了未经验证的椭圆外,这种方法效果很好.有任何想法吗?
我正在为第三方库编写一个C#包装器,它从硬件设备读取单个值和数组,但总是返回一个object []数组,即使是一个值也是如此.当我希望最终用户能够使用泛型来接收数组或单个值时,这需要重复调用object [0].
我想使用泛型,以便被调用者可以通过以下方式使用包装器:
MyWrapper<float> mw = new MyWrapper<float>( ... );
float value = mw.Value; //should return float;
MyWrapper<float[]> mw = new MyWrapper<float[]>( ... );
float[] values = mw.Value; //should return float[];
Run Code Online (Sandbox Code Playgroud)
在MyWrapper中,我目前的Value属性如下:
public T Value
{
get
{
if(_wrappedObject.Values.Length > 1)
return (T)_wrappedObject.Value; //T could be float[]. this doesn't compile.
else
return (T)_wrappedObject.Values[0]; //T could be float. this compiles.
}
}
Run Code Online (Sandbox Code Playgroud)
我在第一种情况下遇到编译错误:
无法将'object []'类型转换为'T'
如果我将MyWrapper.Value更改为T [],我会收到:
无法将'object []'类型转换为'T []'
有关如何实现目标的任何想法?谢谢!
我有一个必须编译并在64位模式下运行的项目.不幸的是,我需要调用一个仅在32位模式下可用的DLL,因此我无法在一个Visual Studio项目中容纳所有内容.我正在寻找包裹在自己的EXE /服务的32位DLL和远程发布(虽然在同一台机器上)从我的64位应用程序调用该EXE /服务的最佳途径.我的操作系统是Win7 Pro 64位.
对此32位进程的所需调用是每秒几十次,但数据量较低.这是一个实时图像分析应用程序,因此尽管音量低,响应时间仍然很重要.大量发送/接收单个基元.
理想情况下,我会托管一个WCF服务来容纳这个DLL,但在64位操作系统中,不能强制服务作为x86运行!来源.这真是不幸,因为我在我的机器上调用WCF服务的函数只有4毫秒.
我已经尝试过命名管道.net.我发现它们比WCF慢40-50倍(对我来说无法使用).
任何其他选择或建议,以最好的方式来解决我的难题?
我正在使用XNA构建一个项目,我可以使用液晶投影仪和单色相机在墙上画"涂鸦",过滤后只能看到手持激光点指针.我想使用任意数量的激光指针 - 此时并不关心区分它们.
墙是10'x 10',相机只有640x480,所以我试图使用如下所示的样条曲线进行子像素测量:tpub.com
相机以120fps(8位)运行,所以我的问题是找到亚像素激光点中心的最快方法.目前我正在使用强力2D搜索在进行样条插值之前找到图像上最亮的像素(0 - 254).这种方法速度不是很快,而且每一帧都需要比计算机更长的时间.
编辑:为了澄清,最后我的相机数据由表示像素亮度的2D字节数组表示.
我想做的是使用XNA着色器为我压缩图像.这有用吗?根据我的理解,实际上没有办法在Pixel Shader中保留持久变量,例如运行总计,平均值等.
但是为了论证,让我说我发现使用蛮力的最亮像素,然后使用texcoords将它们和样条曲线的相邻像素存储到X个顶点中.那么使用HLSL使用texcoords计算样条曲线是否可行?
我也对我的XNA盒子外的建议持开放态度,无论是DX10/DX11,也许是某种类似的FPGA等等.我对这种方式处理数据的方式并不是很有经验.我想如果他们可以在使用2节AA电池的Wii-Mote上做这样的事情,那么我可能会以错误的方式解决这个问题.
有任何想法吗?
我有一个复选框,以及一个ItemsControl,通过以下方式填充几个DataGrids:
<Checkbox Content="Birthday Column Visible" x:Name="UI_BirthdayVisibleCB" />
<ItemsControl ItemsSource="{Binding Path=ParentsCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Children}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Birthday" Width="120" Visibility="{Binding IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" >
...
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Rest of closing tags>
Run Code Online (Sandbox Code Playgroud)
这会在尝试在DataGridTemplateColumn上查找IsChecked时创建绑定输出错误.如果我尝试搜索相对祖先,我会收到异常:
Binding.RelativeSource cannot be set while using Binding.ElementName.
Run Code Online (Sandbox Code Playgroud)
我有一个ViewModel,并且主要坚持MVVM,但在这种情况下,我真的想在View层上保持列可见性.请注意,BoolToVis只需将布尔值转换为可见性.
编辑
这是我正在尝试做的一个例子:
<DataGridTemplateColumn Header="Birthday" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyView} }, Path=IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" />
Run Code Online (Sandbox Code Playgroud)
它编译但不运行,它抛出上面的异常.
我正处于一个大项目的完成阶段,该项目有几个大的组件:图像采集,图像处理,数据存储,工厂I/O(自动化项目)和其他几个.
这些组件中的每一个都是相当独立的,但是要使项目作为一个整体运行,我需要每个组件至少一个实例.每个组件还具有ViewModel和View(WPF),用于监视状态和更改内容.
我的问题是实例化所有这些对象的最安全,最有效和最易维护的方法,将一个类订阅到另一个类中的Event,并为所有这些提供一个共同的ViewModel和View.
如果我有一个名为God的类具有所有这些对象的私有实例,那会不会最好?我过去做过这件事而后悔了.
或者如果上帝依靠这些物体的Singleton实例来让球滚动,那会更好吗?
或者,如果Program.cs(或Main(...)所在的位置)实例化所有这些组件,并将它们作为参数传递给God,然后让他(窃笑)和他的ViewModel处理运行这个项目的细节.
我希望听到的任何其他建议.
谢谢!
我正在从WinForms/XNA过渡到WPF/SlimDX,因为:
我之前的所有XNA代码都在C#中.我无法弄清楚如何在高级别上将其移植到SlimDX和WPF.我疯了似的搜索.我发现的最接近的是:
1)http://www.gamedev.net/community/forums/topic.asp?topic_id=507941 许多文章指出了这个讨论,但它不完整,我无法弄清楚XAML,我得到设备错误附加所有遗漏的_slimDXDevice和Window1事件.
2)http://www.codeproject.com/KB/WPF/D3DImage.aspx 本文假设用户正在移植C++.我正在移植非常接近MDX代码的XNA代码.
如果我能够获得一个带有自定义SlimDX驱动视口的WPF表单只是一个蓝色框,我可以从那里开始.在XNA中,我渲染了许多单独的RenderTargets并将它们放在屏幕上,现在我想将它们附加到控件上.但首先,只有一个蓝盒子!:d
有任何想法吗?我觉得这要么简单,要么就是我缺少一些"千篇一律"的代码.非常感激!
我一直在使用以下几个代码来完成几十个课程
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些类都实现了INotifyPropertyChanged.为了使我的DRY警报静音,最近我一直在重构这些类来继承我的基类,PropertyNotifier它的唯一目的是提供NotifyPropertyChanged从它继承的类 - 这是ViewModel我庞大项目中的几十个类.
它感觉很懒,有点脏.我是在损害性能还是破坏了良好的设计实践?我认为如果改变通知应该是这么简单,那么WPF框架中就会有一个基类来完成我的PropertyNotifier类所做的事情.
请注意,由于很多原因,我的UI响应性一直存在性能问题 - 主要是由于大量控件.所以我希望尽可能地减肥.有任何想法吗?
我希望在XAML中设置一个UserControl成为Content另一个UserControl,就像你可以设置Button's Content为任何东西一样.
假设我的"外部" UserControl看起来像这样:
<MyUserControl>
<Grid>
<Border FancyPantsStyling="True">
<-- I want to insert other controls here -->
</Border>
</Grid>
</MyUserControl>
Run Code Online (Sandbox Code Playgroud)
我想以这种方式实例化:
<local:MyUserControl>
<local:MyUserControl.Content>
<local:AnotherControl />
</local:MyUserControl.Content>
</local:MyUserControl>
Run Code Online (Sandbox Code Playgroud)
如何设计MyUserControl将其渲染Content到特定位置?
我有一个浮点值的单维数组(c#加倍FYI),我需要找到值的"峰值"......好像是绘制的.
我不能只取最高值,因为峰值实际上是一个波动很小的高原.这个高原正处于一堆噪音的中间.我正在寻找能够让我成为这个高原中心的解决方案.
示例数组可能如下所示:
1,2,1,1,2,1,3,2,4,4,4,5,6,8,8,8,8,7,8,7,9,7,5,4,4, 3,3,2,2,1,1,1,1,1,2,1,1,1,1
峰值位于粗体部分的某处.
有任何想法吗?