小编Kag*_*age的帖子

鼠标绑定鼠标滚轮以放大WPF和MVVM

好的,我已经弄清楚如何使用LayoutTransform和ScaleTransform让我的UI元素网格进行缩放.我不明白的是我如何让我的View响应CTRL + MouseWheelUp\Down来做到这一点,以及如何使代码适应MVVM模式.

我的第一个想法是将ZoomFactor存储为属性,并绑定到命令来调整它.

我看的是:

<UserControl.InputBindings>
 <MouseBinding Command="{Binding ZoomGrid}" Gesture="Control+WheelClick"/>
</UserControl.InputBindings>
Run Code Online (Sandbox Code Playgroud)

但我看到2个问题:

1)我认为没有办法判断车轮是上升还是下降,我也不知道如何确定车轮的数量.我见过MouseWheelEventArgs.Delta,但不知道怎么弄它.

2)绑定到viewmodel上的命令似乎不对,因为它严格来说是View事物.

由于缩放只是严格的UI视图,我认为实际的代码应该放在代码隐藏中.

你们怎么实现这个?

ps,我使用Cinch for MVVM使用.net\wpf 4.0.

data-binding wpf mouse mvvm cinch

8
推荐指数
2
解决办法
9428
查看次数

给定UIElementCollection,找到具有StyleA的所有元素,并在WPF中将它们更改为StyleB

我有一个MyGrid.Children UIElementCollection,我想在其中找到所有样式设置为StyleA的矩形,并将它们设置为StyleB.

如果可能的话我想使用LINQ,所以我可以避免讨厌的嵌套循环.

像这样的伪代码:

var Recs = from r in MyGrid.Children
                  where r.Style == StyleA && r.GetType() == typeof(Rectangle)
                  select r as Rectangle;
Run Code Online (Sandbox Code Playgroud)

然后:

foreach(Rectangle r in Recs)
   r.Style = StyleB;
Run Code Online (Sandbox Code Playgroud)

LINQ大师可以帮助我改进我的LINQ-fu吗?

linq wpf styles uielementcollection

6
推荐指数
1
解决办法
6363
查看次数

ImportMany元数据不导入

我一直试图想这几天,没有运气.

我正在尝试使用[ImportMany]从一个充满DLL的目录导入IEditorSystem类型的导出,它具有IEditorSystemMetadata类型的自定义元目.我想首先获取元数据,并将其推送到一些文本框等,以便用户可以选择使用哪个EditorSystem,并在选择时加载该系统......

我一直在尽可能地遵循示例,这是我到目前为止所拥有的.

[ImportMany]
public ObservableCollection<Lazy<IEditorSystem, IEditorSystemMetadata>> EditorSystemList
Run Code Online (Sandbox Code Playgroud)

这是它应该导入的内容:

[Export(typeof(IEditorSystem))]
    [SignalSystemData("Very Very Long Name", "Short Name")]
    public class MyEditorSystem: IEditorSystem
    {
        public MyEditorSystem()
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

和创业公司:

AggregateCatalog Catalog = new AggregateCatalog(
                new DirectoryCatalog(@".\EditorSystems"),
                new AssemblyCatalog(Assembly.GetExecutingAssembly()));
            CompositionContainer Container = new CompositionContainer(Catalog);
            Container.ComposeParts(this);
Run Code Online (Sandbox Code Playgroud)

我可以在Catalog.Part中看到MyEditorSystem和具有ImportMany的viewmodel,但是从未填充EditorSystemList.我没有写作错误.

我认为这可能与Lazy <>有关,所以我试过了

public ObservableCollection<IEditorSystem> EditorSystemList
Run Code Online (Sandbox Code Playgroud)

也没有运气.

我能想到的唯一复杂因素是我正在使用Cinch,它使用MEFedMVVM,它也使用MEF.我认为它不会干扰,但我不确定.

我想我做错了,有人能理解这个吗?

更新:

实现一个新的IComposer,其中包含您需要的目录.

虽然ImportMany仍然失败,但只有在我尝试使用它导入元数据时才会失败.元数据只是几个字符串,据我所知,遵循示例.

最后找到原因:IEditorSystem的实现是在一个单独的DLL中,如前所述.但是,dll的任何新版本都不会复制到主项目的输出子目录中.我手动复制了第一个,忘了将后期构建副本添加到dll项目中.哦,好好学习了一堆关于MEF的东西,所以不是完全浪费了几天:)

mef

5
推荐指数
1
解决办法
4106
查看次数

导入构造函数和子类

我有一个抽象基类和一个派生类.我正在尝试使用MEF通过在基类中使用[ImportingConstructor]向我的WindowManager注入引用.即.

[ImportingConstructor]
public SomeViewModel(IWindowManager windowmanager) {...}
Run Code Online (Sandbox Code Playgroud)

问题是,在我添加之前,我所有的都没有param构造函数,并且派生类抱怨如果我向基类添加一个无参数构造函数,WindowManager永远不会被注入.

使用我目前有限的知识,我能想到的唯一方法是将管理器导入更改为属性导入,并且只有一个无参数的默认构造函数.这种错误,因为一般规则似乎更喜欢构造函数注入所需的依赖项,以及属性注入可选的.

我可以在我的子类中添加覆盖[ImportingConstructor],但这似乎是不必要的代码重复.

有没有更好的方法来做到这一点,即确保在创建派生类时注入我的依赖项?

c# mef

5
推荐指数
1
解决办法
2047
查看次数

在C#中动态加载dll

我有一个用于编辑的窗口.编辑器应该加载一个dll(我完全控制它)以响应用户的选择,以了解如何直观地显示信息.(它们是dll,因为用户不一定想要或不需要每一个显示模型,并且还允许添加新的模型而不会弄乱主项目)

它们都将简单地存储在一个子目录中(现在无论如何)我很确定我可以枚举可用的dll但是我还需要做两件我不确定的事情.

1)从dll获取元数据的一些方法,所以我可以构建可能的显示选择列表......

2)加载选定的dll,并根据需要卸载它

任何建议将不胜感激.

c# dll

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

标签 统计

c# ×2

mef ×2

wpf ×2

cinch ×1

data-binding ×1

dll ×1

linq ×1

mouse ×1

mvvm ×1

styles ×1

uielementcollection ×1