2010-11-12 34 views
1

我正在構建一個Windows Phone 7應用程序。對此,我製作了一個ListBox,它有兩種模式:編輯和不編輯。當它處於編輯模式時,+-圖標顯示在項目旁邊。當它處於正常模式時,圖標將被隱藏。Silverlight:動畫化數據模板屬性/綁定到代碼隱藏?

我想弄清楚如何做到這一點。這裏是控制:

<Grid x:Name="LayoutRoot"> 
     <ListBox x:Name="ContentListBox"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 

         <Image Source="{Binding Path=IconSource}" 
           Grid.Column="0" 
           Width="96" 
           Height="96" 
           VerticalAlignment="Center" /> 

         <TextBlock Text="{Binding Path=Name}" Grid.Column="1" /> 

        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

理想情況下,我想動畫圖標第一列滑動從Width="0"Width="Auto"。我看着視覺狀態,但不確定如何使用它們。

出於測試目的,我現在試圖將第一列的可見性綁定到某些屬性,指示我們是否處於編輯模式。

我可以從代碼隱藏的第一列設置Width,但我不知道該怎麼做。

我試着在ColumnDefinition上設置Visibility,但它抱怨沒有這樣的元素存在。

我可以在每個Image上設置Visibility。理想情況下,我想將它綁定到代碼隱藏中的屬性,而不是列表框中每個項目的屬性。我想這一點,但無法得到它的工作:

後面的代碼:

public bool Editing { get; set; } 

XAML:

    <Image Source="{Binding Path=IconSource}" 
          Grid.Column="0" 
          Width="96" 
          Height="96" 
          VerticalAlignment="Center" 
          Visibility="{Binding Path=Editing, Converter={StaticResource visibilityConverter}}" /> 

我還能嘗試一下呢?難道我做錯了什麼?理想情況下,我想只使用視覺狀態。

回答

0

您正在使用visibilityConverter綁定可見性屬性的正確軌道。如果沒有看到代碼的其餘部分,這很難說,但它看起來像是試圖將圖像的可見性綁定到頁面上的編輯屬性(在代碼後面)。但是,您的項目模板中的數據上下文不會是頁面,而是列表項本身(即,您綁定ItemSource的任何東西)。

您的代碼實際上是試圖綁定到列表項上的Editing屬性。如果這是你想要的(即爲了控制每個項目的編輯),那麼只要確保列表中的每個對象都有一個Editing屬性(而不是頁面本身的一個Editing屬性)。

相關問題