晚上好! 我已阅读有关绑定的多个线程,并认为我得到了它的悬念(至少对于textBoxes,ObservableCollections等)。 然而,现在,我有一个更复杂的问题,并在某处迷路了:
我创建了一个UserControl(STATUSBOX),包含标签等。 我绑定了这样的标签:
<Label x:Name="c1" x:FieldModifier="private" Grid.Column="1"
Grid.Row="1" Height="20" Style="{StaticResource labelTable}"
Width="140" Content="{Binding Path= value1}" Margin="0,0,0,0" ></Label>
在后面的代码中,我实现了它:
public String value1
{
get { return (String)GetValue(ValueProperty1); }
set {
SetValue(ValueProperty1, value);
//setLightColor(1, value); //[I]
}
}
public static readonly DependencyProperty ValueProperty1 =
DependencyProperty.Register("value1", typeof(string),
typeof(UC_StatusBox_detailed), new PropertyMetadata(null));
这很好用。
然而,现在,我尝试添加一个状态指示灯,在绿色 - 红色 - 红色之间切换。因此,我创建了一个新的UserControl(LAMPCONTROL),它显示了精灵图像的一部分:
<Border x:Name="frame" x:FieldModifier="private" Width="30" Height="30" Grid.Column="0"
Grid.Row="0" CornerRadius="4" BorderThickness="1">
<Rectangle Height="30" Width="30" Grid.Column="0"
HorizontalAlignment="Right" VerticalAlignment="Center">
<Rectangle.Fill>
<ImageBrush x:Name="imgBrush" x:FieldModifier="private" ViewboxUnits="Absolute" Viewbox="0,0, 30,30" ImageSource="/TestControl;component/Icons/spriteLight.png"/>
</Rectangle.Fill>
</Rectangle>
</Border>
我添加了以下方法:
private void UpdateLightStatus(Boolean statusOK)
{
int offset;
if (statusOK)
{
offset = 0;
}
else
{
offset = 30;
}
this.imgBrush.Viewbox = new Rect(offset, 0, 30, 30);
}
如果我使用它并且#34;独立并且#34;这也有效。
但是,如果我尝试在我的STATUSBOX中实现这一点,我很难让它工作...... 我希望能做类似这里的事情[I]并且一切都已完成,但这不起作用。 在下一个方法中,我尝试在LAMPCONTROL中创建一个等于STATUSBOX中的DependencyProperty,并在LAMPCONTROL的xaml中添加一个绑定,从那里我有点困惑。
问题 - 简而言之 - 将是:如何调用子UserControl的方法 当main-UserControl的bound属性发生变化时,来自main-UserControl?
我希望我的问题有点可以理解,如果需要更多信息,我很乐意提供,但我不想让这个问题比现在更大...... < / p>
感谢您阅读所有这些和最好的问候
费边
克莱门斯让我朝着正确的方向前进。解决方案如下答案 0 :(得分:0)
如果更改main-UserControl的bound属性,如何从main-UserControl调用子UserControl的方法?
你可以在主控件的XAML标记中给子控件x:Name
:
<local:LampControl x:Name="subControl" />
然后,您可以在主控件的代码隐藏中使用此名称访问它:
subControl.UpdateLightStatus(false);
答案 1 :(得分:0)
public static readonly DependencyProperty Value1Property =
DependencyProperty.Register("Value1", typeof(string),
typeof(UC_StatusBox_detailed), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(OnValueChanged)));
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//my code here
}