0

我对 PRISM 中的区域有一个小问题。所有基础测试都可以正常工作,但现在我想用纯 C# 替换以下 XAML:

<UserControl x:Class="CAL.Modules.Simple.Region_Testing.RegionManagerTypes.XAML.ItemsControlRegionAdapterTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cal="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"
    Height="Auto" Width="Auto">
        <ItemsControl cal:RegionManager.RegionName="ItemsControlRegionAdapterTestRegion"/>
</UserControl>

我的测试类中的代码相当简单,我访问 RegionManager 并添加一些测试视图。但是,正如您在上面的 XAML 中看到的那样,除了将 RegionManager 附加到控件之外,UserControl 中实际上没有发生任何事情。我确信这在代码中必须是可能的,扩展了我已经拥有的以下几行:

        // MISSING
        // Creating the UserControl in CODE instead of XAML


        // Create the UserControl and add it to the main window
        regionManager.AddToRegion(RegionNames.MainRegion, new ItemsControlRegionAdapterTest());

        // Add some views to the region inside the user control
        var currentTestRegionName = TestingRegionNames.ItemsControlRegionAdapterTestRegion;
        regionManager.Regions[currentTestRegionName].Add(new BlueView());
        regionManager.Regions[currentTestRegionName].Add(new RedView());

感谢您的任何提示...

4

2 回答 2

1

好的,XamlReader 方法正在工作(小修正,请参阅随附的源代码)...

但老实说,它看起来有点难看 :-) 所以如果有人知道如何“在代码中附加 regionManager”,欢迎提供详细信息。首先,有效的 XAML 读取器行是:

        // MISSING
        // Creating the UserControl in CODE instead of XAML
        var obj = (UserControl)XamlReader.Parse(@"<UserControl xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                                                               xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
xmlns:cal=""clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation""
Height=""Auto"" Width=""Auto"">
    <ItemsControl cal:RegionManager.RegionName=""ItemsControlRegionAdapterTestRegion""/></UserControl>");

        // Create the UserControl and add it to the main window
        regionManager.AddToRegion(RegionNames.MainRegion, obj);

知道了!!(至少它正在工作,不确定是否是最佳实践)

        var uC = new UserControl();
        var iC = new ItemsControl();
        uC.Content = iC;

        RegionManager.SetRegionName(iC, "ItemsControlRegionAdapterTestRegion");

        regionManager.AddToRegion(RegionNames.MainRegion, uC);

感谢您的所有帮助...仍然欢迎评论...

于 2009-08-02T22:54:18.510 回答
0

尝试XamlReader方法:

private const string xaml = @"
<UserControl x:Class=""CAL.Modules.Simple.Region_Testing.RegionManagerTypes.XAML.ItemsControlRegionAdapterTest""
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
    xmlns:cal=""clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation""
    Height=""Auto"" Width=""Auto"">
        <ItemsControl cal:RegionManager.RegionName=""ItemsControlRegionAdapterTestRegion""/>
</UserControl>";

//in some method
public void RunMethod()
{
     //create object and cast it
     ItemsControlRegionAdapterTest obj = (ItemsControlRegionAdapterTest) XamlReader.Parse(xaml);
}
于 2009-08-02T22:36:47.007 回答