获取System.Reflection.Assembly.GetExecutingAssembly()。GetName()。Version.ToString();来自XAML

时间:2013-10-21 16:44:51

标签: c# wpf reflection

是否有机会获得:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

来自XAML代码?

<Window x:Class="TestWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title=" **Here** " Height="700" Width="660"
        Name="myWindow" xmlns:my="clr-namespace:TestWpf">

</Window>

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用MarkupExtension:

public class Version : MarkupExtension
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return System.Reflection.Assembly
                     .GetExecutingAssembly().GetName().Version.ToString();
    }
}

并以这种方式使用它:

<Window x:Class="TestWpf.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="{my:Version}" 
    Height="700" Width="660"
    Name="myWindow" 
    xmlns:my="clr-namespace:TestWpf">

</Window>

答案 1 :(得分:0)

Window的代码隐藏中创建一个返回该字符串的属性:

public string Version
{
    get
    {
        return System.Reflection.Assembly
            .GetExecutingAssembly().GetName().Version.ToString();
    }
}

然后从您的XAML代码中引用它:

<Window x:Class="TestWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="{Binding Version, RelativeSource={RelativeSource Self}}" 
        Height="700" Width="660"
        Name="myWindow" 
        xmlns:my="clr-namespace:TestWpf">

</Window>

据我所知,如果程序当前直接在XAML代码中运行,则无法检索版本。您将始终必须使用某种背景代码。这可以是代码隐藏,也可以是视图模型,MarkupExtension或其他类型的DataContext。