2012-06-20 3 views
1

이 문제에 대한 해결책을 찾을 수 없습니다 :바인딩을 사용하여 ElementName에

ItemControls로 내 테이블을 만들고 있습니다. 열의 크기를 조정하려면 한 셀의 너비 속성을 해당하는 열의 ActualWidth 속성에 바인딩하고 싶습니다.

나는 시도 다음,하지만 작동하지 않습니다 :

<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 (more info here)은 생성자에서 InitializeComponent()을 호출 할 때만 읽기 때문에 바인딩 할 수 없습니다.

가장 쉬운 방법은 Data 개체에 DesiredWidth 열을 추가하고 두 너비를 모두 바인딩하는 것입니다 (기본값은 100).

+0

그게 문제가 될 수 있습니다, 그 뒤에 코드를 변경할 수 없습니다. – ldrdl