小编buf*_*erz的帖子

X,Y处的WPF中心椭圆

我有一个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)

除了未经验证的椭圆外,这种方法效果很好.有任何想法吗?

wpf

18
推荐指数
3
解决办法
2万
查看次数

当T可以是一个数组时,C#泛型

我正在为第三方库编写一个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 []'

有关如何实现目标的任何想法?谢谢!

c# generics templates

14
推荐指数
1
解决办法
1万
查看次数

从64位exe访问32位DLL的方法

我有一个必须编译并在64位模式下运行的项目.不幸的是,我需要调用一个仅在32位模式下可用的DLL,因此我无法在一个Visual Studio项目中容纳所有内容.我正在寻找包裹在自己的EXE /服务的32位DLL和远程发布(虽然在同一台机器上)从我的64位应用程序调用该EXE /服务的最佳途径.我的操作系统是Win7 Pro 64位.

对此32位进程的所需调用是每秒几十次,但数据量较低.这是一个实时图像分析应用程序,因此尽管音量低,响应时间仍然很重要.大量发送/接收单个基元.

理想情况下,我会托管一个WCF服务来容纳这个DLL,但在64位操作系统中,不能强制服务作为x86运行!来源.这真是不幸,因为我在我的机器上调用WCF服务的函数只有4毫秒.

我已经尝试过命名管道.net.我发现它们比WCF慢40-50倍(对我来说无法使用).

任何其他选择或建议,以最好的方式来解决我的难题?

.net c# visual-studio-2010

13
推荐指数
1
解决办法
7847
查看次数

快速亚像素激光点检测

我正在使用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上做这样的事情,那么我可能会以错误的方式解决这个问题.

有任何想法吗?

c# xna visual-studio-2008

10
推荐指数
2
解决办法
3388
查看次数

WPF绑定到ItemsControl中的ElementName

我有一个复选框,以及一个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)

它编译但不运行,它抛出上面的异常.

wpf binding

9
推荐指数
2
解决办法
2万
查看次数

MVVM并避免使用Monolithic God对象

我正处于一个大项目的完成阶段,该项目有几个大的组件:图像采集,图像处理,数据存储,工厂I/O(自动化项目)和其他几个.

这些组件中的每一个都是相当独立的,但是要使项目作为一个整体运行,我需要每个组件至少一个实例.每个组件还具有ViewModel和View(WPF),用于监视状态和更改内容.

我的问题是实例化所有这些对象的最安全,最有效和最易维护的方法,将一个类订阅到另一个类中的Event,并为所有这些提供一个共同的ViewModel和View.

如果我有一个名为God的类具有所有这些对象的私有实例,那会不会最好?我过去做过这件事而后悔了.

或者如果上帝依靠这些物体的Singleton实例来让球滚动,那会更好吗?

或者,如果Program.cs(或Main(...)所在的位置)实例化所有这些组件,并将它们作为参数传递给God,然后让他(窃笑)和他的ViewModel处理运行这个项目的细节.

我希望听到的任何其他建议.

谢谢!

c# wpf mvvm god-object

8
推荐指数
1
解决办法
984
查看次数

WPF控件中的SlimDX视口

我正在从WinForms/XNA过渡到WPF/SlimDX,因为:

  • a)WPF相对于WinForms的所有好处(但学习曲线=哎哟!)
  • b)我想将多个SlimDX视口附加到Panels.XNA有1个"游戏"屏幕.
  • c,最后和最小)DirectX 10支持

我之前的所有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

有任何想法吗?我觉得这要么简单,要么就是我缺少一些"千篇一律"的代码.非常感激!

c# wpf slimdx

7
推荐指数
1
解决办法
8514
查看次数

从一个实现INotifyPropertyChanged的基类继承

我一直在使用以下几个代码来完成几十个课程

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响应性一直存在性能问题 - 主要是由于大量控件.所以我希望尽可能地减肥.有任何想法吗?

.net c# wpf mvvm inotifypropertychanged

7
推荐指数
1
解决办法
2264
查看次数

WPF UserControl在另一个UserControl中

我希望在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到特定位置?

wpf user-controls

7
推荐指数
2
解决办法
1万
查看次数

单维峰值拟合

我有一个浮点值的单维数组(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

峰值位于粗体部分的某处.

有任何想法吗?

c# algorithm math

6
推荐指数
2
解决办法
1616
查看次数