我有一个 StepsWnd 窗口,其中使用了两次 UserControl StepProp,并在单独的文件中声明。
<Window x:Class="MyProject.StepsWnd"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject"
Height="550" Width="850">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<local:StepProp Grid.Column="0" DataContext="{Binding Path=PrevStepVM}" x:Name="m_PrevStep"/>
<local:StepProp Grid.Column="1" DataContext="{Binding Path=CurStepVM}" x:Name="m_CurStep"/>
</Grid>
</Window>
创建 StepsWnd 窗口时,将调用 StepProp 构造函数两次 - 对于 m_PrevStep 和 m_CurStep。
public class StepProp : UserControl
{
public StepProp()
{
InitializeComponent();
}
//...
}
如何从 StepsWnd 窗口的标记将参数传递给 StepProp 类构造函数,以便我可以识别谁在调用构造函数:m_PrevStep 或 m_CurStep?为了得到这样的东西?
public class StepProp : UserControl
{
public StepProp(object parameter)
{
InitializeComponent();
if ((string)parameter == "PrevStep")
{
//todo somthing
}
else if ((string)Param == "CurStep")
{
//todo somthing else
}
}
//...
}
如何从 StepsWnd 窗口的标记将参数传递给 StepProp 类构造函数,以便我可以识别谁在调用构造函数:m_PrevStep 或 m_CurStep?
你不能。 XAML 是一个markup语言,你不能创建一个实例UserControl
使用除默认构造函数之外的任何其他不接受任何参数的构造函数。因此,忘记在 XAML 中使用依赖注入吧。
如果您希望构造函数根据您创建的实例而表现不同,您可能应该考虑创建两个不同的UserControl
例如,类型可以共享相同的基类或相互继承。
或者,您可以按照注释中的建议定义和设置属性:
<local:StepProp x:Name="m_PrevStep" YourProperty="m_PrevStep" />
...并处理 setter 或属性(如果定义依赖属性则为回调)中的任何逻辑。
请注意,属性值在构造函数中不可用,因为必须在 XAML 处理器实际设置属性之前创建实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)