1

私はSilverlightをまったく使用したことがなく、Silverlightを変更するタスクが与えられました。私の問題は非常に単純です(asp.net Webフォームで実行した場合)。基本的に、グリッドでは、このようなものに年を追加したいと思います。

Jan + "-" + DateTime.Now.Year.ToString()

Feb + "-" + DateTime.Now.Year.ToString()

などなど。

xamlは次のようになります

<Grid x:Name="ContentGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0">
                <Grid.Resources>

<DataTemplate x:Key="mykey1">
                        <Grid >....</Grid>
</DataTemplate>
<DataTemplate x:Key="mykey2">
                        <Grid >....</Grid>
</DataTemplate>
<DataTemplate x:Key="mykey3">
                        <Grid >
<StackPanel Orientation="Vertical">
<Border BorderBrush="{StaticResource LogicaPebbleBlackBrush}" BorderThickness="1">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal" Style="{StaticResource HeaderStackPanel}">


<TextBlock Style="{StaticResource HeaderTextBlock}" Text="Jan-2013" Width="75" TextAlignment="Center"/>
<TextBlock Style="{StaticResource HeaderTextBlock}" Text="Feb-2013" Width="75" TextAlignment="Center"/>


</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ Grid>
</DataTemplate>

毎年変化するように、年をダイナミックにしたいだけです。助けてください。

4

3 に答える 3

0

これをXAMLで直接実行できるかどうかはわかりません。

これは、バインディングを使用して行うのが最適です。Silverlightでは、ほとんどのデータソースを分離コード(つまりViewModel)のプロパティに バインドします。

一言で言えば:

  1. ページのDataContextを分離コードクラス(通常はViewModel)に設定します
  2. ViewModelはINotifyPropertyChangedインターフェイスを実装する必要があります
  3. TextBoxのテキストをバインドして、コードで計算を行うViewModelのDateプロパティを使用します

DataContextを設定したら、次のようにXAMLを記述できます。

<TextBlock Text="{Binding Path=Year, Mode=OneWay}" />

ViewModelプロパティは次のようになります。

public class ViewModel : INotifyPropertyChanged
{
    private DateTime _year = DateTime.Now;
    public DateTime Year
    {
        get { return _year; }    // <--- append whatever here or in the setter
        set
        {
            _year = value; 

            if( this.PropertyChanged != null )
            {
                this.PropertyChanged( this, new PropertyChangedEventArgs( "Year" ) );
            }
         }
     }
  ...
}
于 2012-10-11T13:26:02.437 に答える
0

これはあなたを助けるかもしれません。それはxamlのみです:

<Grid.Resources>
      <System:DateTime  x:Key="DateTimeDataSource"/>
</Grid.Resources>

<TextBlock DataContext="{Binding Source={StaticResource DateTimeDataSource}}" 
      Text="{Binding Today.Year}">
</TextBlock>

この名前空間を必ず追加してください:

xmlns:System="clr-namespace:System;assembly=mscorlib" 

Now.Day、Today.Month など、他の DateTime プロパティも表示できます。

于 2012-10-11T14:26:20.450 に答える
0

あなたの質問を読み直しましたが、このようなことをする必要があると思います。グリッドで作業しているため、テキストブロックに名前を付けることができます。

    <TextBlock Style="{StaticResource HeaderTextBlock}" x:Name="JanTB" Width="75" TextAlignment="Center"/>

ビハインド コードでは、テキスト ブロック内にテキストを配置するだけで十分です。

    JanTB.Text = "Jan-" + Datetime.now.Year.ToString();

これで質問が解決することを願っています。

于 2012-11-05T09:44:17.353 に答える