2009-04-11 22 views
7

tengo una cuadrícula de datos y un expansor de este modo:StringFormat obligatorio para funcionar correctamente

<StackPanel> 
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">...</my:DataGrid> 
<Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}">...</Expander> 
</StackPanel> 

La unión está muy bien, pero por alguna razón el formato de cadenas no funcionará. Siempre muestra sólo el valor dataGrid1.SelectedItem.Name También he intentado:

StringFormat=Details of \{0\} 

que no funciona.

Incluso intenté simplemente establecer la propiedad HeaderStringFormat del Expansor en "Detalles de {0}" pero eso tampoco lo formatea.

que era capaz de conseguir que esta solución funcione sin embargo:

<Expander> 
<Expander.Header> 
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox> 
</Expander.Header> 
</Expander> 

¿Alguien sabe por qué StringFormat no está funcionando para la propiedad de cabecera?

Respuesta

4

Según http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/, parece que la propiedad HeaderStringFormat no está destinado a ser utilizado con la unión formato de cadena, sino más bien para especificar el formato a utilizar cuando se enlaza a un objeto que implementa IFormattable.

Teniendo en cuenta que tampoco pude obtener el formato de cadena para trabajar directamente en la expresión de enlace, por lo que podría ser un error. Deberías intentar notificar a Microsoft y quizás lo arreglen.

Con su solución, se recomienda usar un TextBlock en lugar de un TextBox, ya que probablemente no desea que el usuario sea capaz de editar el texto en la cabecera Expander.

+0

Muy bien, eso es informativo. Gracias. Además, estoy usando un TextBlock ... Supongo que lo escribí mal cuando hice la publicación. – Adam

0

Puede tener algo que ver con que Header sea una propiedad de tipo Object en lugar de String. La conversión del valor String a un control UI puede interferir con el formateo. En lugar de TextBox, ¿funciona Label también? Eso debería darte el mismo efecto que lo que inicialmente intentabas hacer.

Actualización: También intente buscar en la propiedad HeaderStringFormat.

+0

Usted tiene un punto sobre el encabezado siendo un objeto y TextBox.Text siendo una cadena. Sin embargo, probé con una etiqueta y funcionó cuando configuré ContentFormatString en lo que quería. La propiedad de etiquetado de contenido también es un objeto, así que todavía no entiendo ... algo extraño con el encabezado. – Adam

3

también me he encontrado con el mismo problema y después de leer algunos artículos, tratando todo tipo de ContentStringFormat y HeaderStringFormat Me acaba de decidir que hacer la siguiente cosa:

<Expander Grid.Row="1" Padding="4"> 
       <Expander.Header> 
       <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/> 
       </Expander.Header>