在Visual Studio中创建转换器的最快方法

时间:2010-10-26 15:55:35

标签: c# wpf visual-studio silverlight

使用Binding转换器时非常常见..我总能找到自己

  • 右键单击正确的文件夹
  • 点击添加
  • 点击新项目
  • (有时)选择左侧的代码
  • 选择班级和“添加”(有时当我匆忙创建一个AboutBox而不是:-()
  • 复制旧的IValueConverter或IMultiValueConverter
  • 更改名称空间和类名
  • 删除旧代码

然后我终于可以开始实施我的新转换器了。

在此之后,我还必须将此命名空间添加到xaml文件中,并在引用之前将其添加到资源中。我这样做了一百万次,这可能是最慢的方式,所以我的问题就是......

在Visual Studio中创建转换器的最快方法是什么?

5 个答案:

答案 0 :(得分:11)

你当然可以节省时间:

  
      
  • 复制旧的IValueConverter或IMultiValueConverter
  •   
  • 更改名称空间和类名
  •   
  • 删除旧代码
  •   

请这样做:

  • 创建一个新类(例如FooConverter
  • 只需添加IValueConverter
  • 即可实施: IValueConverter
  • 如果插入符号仍在IValueConverter,请按 Ctrl + 打开智能标记菜单
  • 从智能标记菜单中选择“实施界面IValueConverter”(应该是第一个选项)

Visual Studio将自动创建必要的方法存根,您只需要编写实现。

答案 1 :(得分:9)

可能最适合您的资源是Visual Studio模板。您可以创建自己的,因此您可以右键单击/创建新项目/转换器,它将存储您手动执行的所有操作。

如果您确实创建了类似的东西,那么通过codeplex或类似的东西与社区分享可能是一个很棒的小项目。

Creating Item Templates in Visual Studio

答案 2 :(得分:2)

我喜欢这个问题和价值转换器,所以我有一些可能对你没有帮助的贡献,Meleak,但希望那些没有这种严格的风格指南,因此可以在一个文件中放置多个转换器:一个片段,为值转换器存根创建代码。

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Value Converter Stub</Title>
            <Shortcut>vc</Shortcut>
            <Description>Code snippet for a value converter stub</Description>
            <Author>H.B.</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>from</ID>
                    <ToolTip>The source type.</ToolTip>
                    <Default>object</Default>
                </Literal>
                <Literal>
                    <ID>to</ID>
                    <ToolTip>The target type.</ToolTip>
                    <Default>object</Default>
                </Literal>
                <Literal>
                    <ID>convertername</ID>
                    <ToolTip>Name of the converter.</ToolTip>
                    <Default>My</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[[ValueConversion(typeof($from$), typeof($to$))]
public class $convertername$Converter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $from$ input = ($from$)value;
        $to$ output;

        throw new NotImplementedException();

        return output;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $to$ input = ($to$)value;
        $from$ output;

        throw new NotImplementedException();

        return output;
    }
}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

将此保存为vc.snippet(或扩展名为snippet的其他内容)在Visual Studio的代码段文件夹中(适用于x64上的VS2010:"%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#")。您还可以通过Tools -> Code Snippet Manager...

导入代码段

要使用它,只需键入vc并按Tab键两次,然后选中两个类字段以填充它们。

您可能需要为ValueConversion - 属性和IValueConverter添加两个引用。

上面的代码片段非常详细,所以这里的代码更轻(关键字是vcl),它省略了属性和方法框架,只有一个可编辑的字段直接设置完整的类名:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Value Converter Stub (Light)</Title>
            <Shortcut>vcl</Shortcut>
            <Description>Code snippet for a light value converter stub</Description>
            <Author>H.B.</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
            <Literal>
                <ID>convertername</ID>
                <ToolTip>Name of the converter.</ToolTip>
                <Default>My</Default>
            </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[public class $convertername$Converter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $end$
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

答案 3 :(得分:0)

将所有转换器类保存在一个文件中(即:Converters.cs),然后当您需要添加一个时,您可以执行相同的复制/粘贴,但您不必添加新项目,重命名空间,添加新命名空间等。

至少,这就是我做的......

答案 4 :(得分:0)

我已将Value Converter项目模板添加到Visual Studio 2010: 从项目上下文菜单,添加...新项目...在线模板文件夹... Silverlight文件夹...值转换器。