2010-04-15 7 views
2

그래서 ItemTemplate을 사용하여 이미지를 표시하는 Listbox가 있습니다. ItemTemplate에서 표시된 이미지의 크기를 변경할 수 있어야합니다. databinding을 통해 너비를 변경할 수 있지만이 작업을 수행하는 방법을 볼 수있는 유일한 방법은 바인딩 할 클래스에 Property (Say, ImageSize)를 추가 한 다음 colleciton의 모든 항목을 새 ImageSize로 변경하는 것입니다. 해당 Datatemplate에있는 항목의 속성에 액세스 할 수있는 방법이 있습니까?Silverlight에서 프로그래밍 방식으로 Data/ItemTemplate을 변경할 수있는 방법이 있습니까?

예.

<navigation:Page.Resources> 
    <DataTemplate x:Key="ListBoxItemTemplate">    
     <Viewbox Height="100" Width="100"> 
      <Image Source="{Binding Image}"/> 
     </Viewbox>    
    </DataTemplate>   
</navigation:Page.Resources> 
<Grid> 
    <ListBox ItemTemplate="{StaticResource ListBoxItemTemplate}" ItemSource="{Binding Collection}"/> 
</Grid> 

컬렉션의 모든 요소에 속성을 바인딩하지 않고 너비 및 뷰 박스의 높이를 설정 어쨌든 있나요?

답변

3

요소 바인딩을 사용할 수 있습니다. 다음과 같이 시도하십시오.

<UserControl.Resources>   
    <DataTemplate x:Key="ListBoxItemTemplate">    
    <Viewbox Height="{Binding Value, ElementName=slider1}" 
      Width="{Binding Value, ElementName=slider1}"> 
     <Image Source="{Binding Image}"/> 
    </Viewbox>       
    </DataTemplate> 
</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="205*" /> 
    <RowDefinition Height="95*" /> 
    </Grid.RowDefinitions> 
    <ListBox ItemTemplate="{StaticResource ListBoxItemTemplate}" 
      ItemSource="{Binding Collection}"/> 
    <Slider x:Name="slider1" Value="100" Maximum="250" Grid.Row="1"/> 
</Grid> 
+0

ElementName 바인딩은 Silverlight 3 이상에서만 작동합니다. Silverlight 4를 사용하고 있기 때문에 작동해야합니다! :) – Arcturus

+0

이렇게 사용하면 숨겨진 텍스트 상자 나 다른 것을 가지고 프로그래밍 방식으로 템플릿을 업데이트 할 수 있습니까? 아니면 그 해커가 더 좋은 방법이 그것을 할 수 있습니까? –

+0

UserControl의 이름을 지정하고 UserControl에서 사용자 지정 속성을 사용할 수도 있다고 생각합니다. 그렇게 할 경우 INotifyPropertyChanged를 구현하고이 속성을 변경할 때 PropertyChanged 이벤트를 발생 시키십시오. – Sorskoot

0

크기를 조정할 크기를 알고있는 경우 다른 숫자를 정의하고이를 전환 할 수 있습니다.

+0

슬라이더를 기반으로해야하므로 500 개의 ItemTemplates를 만들고 싶지 않습니다. –

+0

그러면 작동하지 않습니다. 오 잘. –

관련 문제