如何将辅助控件MaxWidth属性设置为与另一个容器中的另一个相同

时间:2016-06-18 12:18:45

标签: c# wpf

我在表单的一个网格中有StackPanel

<StackPanel x:Name="panelWeelyBibleReading" Grid.Row="2" Grid.Column="0" Margin="2">
    <Label>Bible Reading for Week:</Label>
    <TextBox x:Name="textWeeklyBibleReading">PSALMS 60-68</TextBox>
</StackPanel>
<StackPanel Grid.Row="3" Grid.Column="0" Margin="2">
    <Label>Opening Song:</Label>
    <ComboBox x:Name="comboSongOpen" ItemsSource="{StaticResource SongTitles}">
        <ComboBox.ItemTemplate>
            <DataTemplate DataType="local:SongTitleItem">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Number, StringFormat='000 - '}" />
                    <TextBlock Text="{Binding Title}" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
        <ComboBox.MaxWidth>
            <Binding Path="ActualWidth" 
                ElementName="textWeeklyBibleReading"/>
        </ComboBox.MaxWidth>
    </ComboBox>
</StackPanel>

不同网格中的表格中,我有这个:

<StackPanel Grid.Row="3" Grid.Column="0" Margin="2">
    <Label>Closing Song:</Label>
    <ComboBox x:Name="comboSongEnd" ItemsSource="{StaticResource SongTitles}">
        <ComboBox.ItemTemplate>
            <DataTemplate DataType="local:SongTitleItem">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Number, StringFormat='000 - '}" />
                    <TextBlock Text="{Binding Title}" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
        <ComboBox.MaxWidth>
            <Binding Path="ActualWidth" 
                ElementName="panelWeeklyBibleReading.textWeeklyBibleReading"/>
        </ComboBox.MaxWidth>
    </ComboBox>
</StackPanel>

最初,我尝试在第二个组合中为"textWeeklyBibleReading"使用相同的MaxWidth。但它不起作用。没有警告。只是不起作用。所以我考虑将名称应用到之前的StackPanel,希望我可以将它用作某种接入点。但它仍然无效。

所以我的问题是我需要在第二个组合上设置MaxWidth,它在不同的网格中,但使用在第一个网格组合上计算的值。我有道理吗?

如果有帮助,我会显示完整的表单标记。

1 个答案:

答案 0 :(得分:1)

您应该修改为:

geo_point

因为没有<ComboBox.MaxWidth> <Binding Path="Width" ElementName="textWeeklyBibleReading"/> </ComboBox.MaxWidth> <Binding Path=Width, ElementName=textWeeklyBibleReading/> 等属性,而应该是ActualWidth。并且无需编写容器名称Width,只需编写您需要的panelWeeklyBibleReading

<强>更新

ElementName

您应该将<ComboBox.ItemTemplate> <DataTemplate DataType="local:SongTitleItem"> <StackPanel Orientation="Horizontal" MaxWidth="{Binding Path=Width, ElementName=textWeeklyBibleReading}"> <TextBlock Text="{Binding Number, StringFormat='000 - '}" /> <TextBlock Text="{Binding Title}" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> MaxWidth StackPanel ComboBox StackPanel``(<StackPanel Grid.Row="3" Grid.Column="0" Margin="2">) ComboBox Width StackPanel ComboBox Width ItemTemplate ItemTemplate Data/template Width ComboBox StackPanel 1}}到你的DataTemplate。因此,我建议将ComboBox的var arrcolor = [ paintRed, paintBlue, paintYellow ]; 绑定到arrcolor[0](); 。由于()var arrcolor = [ paintRed, paintBlue, paintYellow]; arrcolor[2](); ,因此最好将var changeColor = { paintRed :function(text){ text.style.color = "red"; }, paintBlue :function(text){ text.style.color = "blue"; }, paintYellow:function(text){ text.style.color = "yellow"; } } var text = document.getElementById('sometext'); changeColor.paintRed(text) 的{​​{1}}绑定到位于{{1}}的{​​{1}}。