2012-06-20 63 views
1

我無法找到解決此問題的方法:使用綁定元素名稱

我正在使用ItemControls創建自己的表。要調整列的大小,我想將一個單元格的Width-property綁定到列的相應ActualWidth-property。

我嘗試以下,但它不工作:

<StackPanel Orientation="Vertical"> 

    <Border BorderBrush="Black" BorderThickness="1"> 
     <ItemsControl ItemsSource="{Binding Data.Columns}" Margin="26,1,1,1"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <!-- here i set the name of the column (Code) --> 
        <Border BorderBrush="Black" BorderThickness="1,0,0,0" Width="100" x:Name="{Binding Code}"> 
         <TextBlock Text="{Binding Header}" /> 
        </Border> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 


    <ItemsControl ItemsSource="{Binding Data.Rows}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Black" BorderThickness="1,0,1,1"> 

        <StackPanel Orientation="Horizontal" Margin="1"> 

         <Grid Width="25"> 
          <General:SeverityIconControl Severity="{Binding Severity}" /> 
         </Grid> 

         <ItemsControl ItemsSource="{Binding Values}"> 
          <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate> 
            <StackPanel Orientation="Horizontal"/> 
           </ItemsPanelTemplate> 
          </ItemsControl.ItemsPanel> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <!-- and here i'd like to bind to the ActualWidth of the corresponding column (Code) 
            but it is not working because ElementName={Binding LocalCode} does not work --> 
            <Border BorderBrush="Black" BorderThickness="1,0,0,0" Width="{Binding ActualWidth, ElementName={Binding LocalCode}}"> 
             <TextBlock Text="{Binding Value}" /> 
            </Border> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
         </ItemsControl> 
        </StackPanel> 
       </Border> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</StackPanel> 

有沒有辦法解決這個不改變數據源(不幸的是,數據源不能編輯)的方法嗎?

+0

如果你從代碼中設置了某些東西,你也許可以更新代碼中的綁定? – Vlad

回答

1

您無法綁定x:Name(更多信息here),因爲只有在構造函數中調用InitializeComponent()時纔會讀取它。

最簡單的方法是將DesiredWidth列添加到您的Data對象,並將兩個寬度都綁定到該對象(默認值爲100)。

+0

這將工作,問題是,我無法更改背後的代碼。 – ldrdl