小编Gis*_*shu的帖子

如何有效地保留.Net字体对象?

用例:用户对设计图面上的对象进行字体自定义,我需要加载/保存到我的数据存储区.即Bold,Italics,Size,Font Name等设置需要保留.

是否有一些简单(和可靠)的机制来转换/从字体对象的字符串表示回读(在这种情况下,我只需要一个属性)?或者是多个属性与自定义逻辑相结合的正确选项?

.net fonts serialization

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

TreeView的IsSynchronizedWithCurrentItem属性(或等效属性)在哪里?

告诉我事实并非如此.

我有一个典型的Windows /文件浏览器,如安装程序.

  • 左侧我有一个TreeView所有数据绑定显示层次结构中的节点
  • 右侧我有一个显示Node.Properties的ListView

ListView有一个IsSynchronizedWithCurrentItem属性.例如,如果我有另一个ListView显示节点列表,并且两个listView都将此属性设置为true.在NodesListView中更改节点选择将自动更新PropertiesListView.

现在我需要与NodesTreeView和PropertiesListView相同的东西......并且看起来TreeView没有这样的属性.

是否有更多的'WPF方式'解决这个问题?或者我是否必须处理Tree的NodeSelectionChanged事件并通过代码刷新listView.

data-binding wpf

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

使用WPF数据绑定将NULL值显示为"NULL"的最简单方法是什么?

我有这个遗留数据库,我正在使用Linq to Sql构建自定义查看器.

现在,表中的某些字段可以具有NULL值.在DataTemplate中使用常规数据绑定(为ORM Designer生成的类型键入)

<TextBlock Text="{Binding Path=columnX}"/>    
Run Code Online (Sandbox Code Playgroud)

如果columnX的值为NULL,则不显示任何内容.(似乎是WPF约定)如果值为NULL,我想显示"NULL".(相当于column_value ?? "NULL")

我可以使用转换器

<TextBlock Text="{Binding Path=columnX, Converter={StaticResource nullValueConverter}}"/>
Run Code Online (Sandbox Code Playgroud)

转换器类

class NullValueConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    if (value == null)
      return "NULL";
    ...
Run Code Online (Sandbox Code Playgroud)

但这似乎太多了.此逻辑也需要在现有的非平凡转换器中重复.

有没有一个快速的方法来实现这一目标?

data-binding wpf linq-to-sql

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

如何使用用户的默认电子邮件客户端弹出撰写/创建邮件对话框?

用例很简单.在某个时间点,我需要能够向用户显示他熟悉的撰写电子邮件对话框(Outlook或其他)

  • 像from,to,Subject这样的字段已经填满了某些应用程序确定的值.
  • 电子邮件也会随附一个附件.

除非用户明确表示,否则不应发送邮件.

我曾经在OL'VB6时代做过这件事.现在无法弄清楚...我只记得那很容易.

托管应用,C#,.net 3.0+

更新#1:是的,似乎mailto删除了对附件的支持(作为安全风险?).我试过了

您需要包含ShellExecute签名,如此处所述.我从中得到的只是一个5 SE_ERR_ACCESSDENIED和2只是为了一些变化

string sMailToLink = @"mailto:some.address@gmail.com?subject=Hey&body= yeah yeah yeah";
IntPtr result = ShellExecute(IntPtr.Zero, "open", sMailToLink, "", "", ShowCommands.SW_SHOWNORMAL);
Debug.Assert(result.ToInt32() > 32, "Shell Execute failed with return code " + result.ToInt32());
Run Code Online (Sandbox Code Playgroud)

同样的MailtoLink与Process.Start完美配合......但只要您不提及附件.

System.Diagnostics.Process.Start(sMailToLink);
Run Code Online (Sandbox Code Playgroud)

其他选项使用Outlook对象模型来执行此操作..但我被告知这需要您根据安装的Outlook的确切版本添加程序集引用.如果用户不喜欢MS用于电子邮件,这也会爆炸.

下一个选项是Mapi和一个名为Mapi33的东西.状态仍在进行中.耳朵仍然接受建议.

c# email

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

是否可以在运行时动态评估包含有效LINQ的字符串?

基本思想是获取一个字符串并根据XML文件(或任何LINQed提供程序)对其进行评估

我发现了这个LINQ动态查询库.只是粗略地浏览一下下载包中的单个文档.这似乎是添加扩展方法来参数化LINQ查询的各个部分.有谁知道这是否进行动态评估?

有什么方法可以做(假设有一些方法可以使用XML文件中的数据为种子播种)?

ClassFromWishfulThinking.Evaluate(sLinqQuery);
Run Code Online (Sandbox Code Playgroud)

.net linq c#-3.0

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

如何在标有属性的目标上记录方法调用?

是否可以将Loggin行为注入标记的类或/和方法,如下所示:

Log("Method {0} started",GetMethodNameTroughReflection)
Call method body
Log("Method {0} Finished",GetMethodNameTroughReflection)
Run Code Online (Sandbox Code Playgroud)

我想创建自己的Attribute类,它将实现方法调用的记录行为.

我想描述app.config文件中的登录行为,可以通过config中的设置禁用它.

怎么做对了?也许为这样的任务创建了解决方案?

c#

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

MEF Container.Dispose是否处理了添加的目录?

这与我的代码看起来类似

var catalog = new AssemblyCatalog(typeof(Program).Assembly);
_container = new CompositionContainer(catalog);
Run Code Online (Sandbox Code Playgroud)

代码分析显示警告CA2000:在对所有引用超出范围之前调用目录上的Dispose.

所以我不确定是否需要禁止警告或将_catalog转换为字段+处理它.

MEF Docs似乎没有提到这一点.

mef

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

在编写组合函数/方法时,"同一抽象级别"的酸测试是什么?

背景:我需要向一组混合体验解释"组合方法".

我想我在阅读Beck的Smalltalk最佳实践时首先听说过它.我个人在编写这样的方法时没有太多问题 - 但是在当地的代码荒野中,我已经看到很多情况,缺乏组合方法创造了难以理解的Blob ......我是少数.所以我带他们通过CleanCode - 这个再次弹出.

前提很简单.

"函数应该简短,做一件事并且有一个有意图的名称.方法体中的每一步都应该处于相同的抽象层次."

我正在努力检查"同一级别的抽象"...即原谅对于初学者来说有点抽象的双关语.

我目前的解释与SICP的"一厢情愿"相似.(想象一下理想的一系列步骤,然后担心实施/实现它.").

在编写组合方法时,是否有人有更好的规则/酸测试来评估您的决定?

language-agnostic oop

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

WPF对所有Winforms控件都有等效的控件吗?

刚刚发现这个困难的方式.我想弹出一个FontDialog以允许用户选择一种字体..这些熟悉的对话框之一..

.net wpf winforms

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

如何添加一个系统"Windows钩子",以便通知窗口被创建/激活?

尝试了很多东西,但是在我的任务栏被我的桌面用户界面上的任务和其他超自然效果中,我无法让它始终如一地工作.

首先使用开放式库http://mwinapi.sourceforge.net/进行尝试.虽然它作为枚举窗口和东西的OO层很好地工作.它无法正常挂钩

下一站是Dino E.在.Net框架中关于Windows Hooks的帖子.我最终写了自己的类型,因为我理解文本并试图让它工作.

我的目的是让这个应用程序运行,并让它能够在运行时记录所有创建的窗口.打电话给所有的眼球......

更新: Snipped因为显然您无法在.Net /托管代码中编写全局Windows挂钩(除了一些低级鼠标或键盘挂钩)

所以我切换到了C++.仍然所有WinAPI调用都返回有效句柄,但我没有看到我的过滤器函数被调用 - 似乎没有收到任何通知.仍然不起作用......有人能发现错误.

void CWinHookFacade::Hook()
{
    HMODULE hCurrentDll = LoadLibrary(_T("[Path to my hook dll]"));
    m_HookHandle = SetWindowsHookEx(WH_CBT, 
        FilterFunctionForHook, 
        hCurrentDll, 
        0);
    if (m_HookHandle == NULL)
    {
        throw new std::exception("Unable to hook");
    }

}
void CWinHookFacade::Unhook()
{
    if (!UnhookWindowsHookEx(m_HookHandle))
    {
        throw new std::exception("Unhook failed!");
    }
    m_HookHandle = NULL;
}

LRESULT CWinHookFacade::FilterFunctionForHook(int code, WPARAM wParam, LPARAM lParam)
{
    if (code >= 0)
    {
        switch(code)
        {
        case …
Run Code Online (Sandbox Code Playgroud)

c# hook winapi

5
推荐指数
2
解决办法
5463
查看次数