Özel bir özelliğinden Bağlama

oy
0

Ben foruma yeni ve SILVERLIGHT çok yeniyim. Ben ve arkadaşı özel bir uygulama üzerinde çalışıyoruz. Biz sadece düğmeleri görüntüleyecek bir menü sistemi inşa ediyoruz eğer atanmış bir rolde o Userís. Yeni bir özellik rolleri tanımlanmış izin vermek için yaratıldı ve test amacıyla biz sadece bir TextBlock text özelliğine, bir dize bu değeri, atamaya çalışıyorsunuz. Bazı kod takılır.

Bu koleksiyona eklenecek öğeler biridir. allowedroles özellik dize geçiyor, bu ayıklayıcıya aracılığıyla görülebilir.

<MenuButton:VerticalButtonCollection x:Key=VerticalButtonsDS d:IsDataSource=True>

<MenuButton:VerticalButton AllowedRoles=test, test2> 
<TextBlock Text={Binding AllowedRoles}></TextBlock>

</MenuButton:VerticalButton>

</MenuButton:VerticalButtonCollection>

Code for the allowed roles property  
Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register(AllowedRoles, GetType(String), GetType(mButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf onAllowedRolesChanged)))


Public Shared Sub onAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs) 
     Dim sender As mButton = CType(d, mButton)
     sender.AllowedRoles = CStr(args.NewValue)
End Sub

ürün hata yoksa, bir liste kutusu görüntülenir, ancak bağlayıcı çalışmıyor. Hatta listbox veri şablonda bağlama yapmak girişiminde bulundu. Bunun kafa karıştırıcı ise, ben parçaları anlamak kolay böyle bir şey göndermek için nasıl do not' appologize.

Teşekkürler

Oluştur 09/12/2008 saat 20:03
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
0

aşağıdakileri yaparak bu çalışma almak kadar sona erdi. hileler biri, böylece bu erişmek için düzenli bağlama kullanın sonra bağlama bir şablon kullanarak nesnenin DataContext'i bağlamak ve bağlayıcı bir şablonda bir dönüştürücü kullanamazsınız olmasıdır.

<UserControl.Resources>
    <mt:AllowedRolesConverter x:Key="RolesConverter"></mt:AllowedRolesConverter>

    <Style x:Key="VerticalButton1Style" TargetType="mt:VerticalButton">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="mt:VerticalButton">
                    <Grid x:Name="RootGrid" DataContext="{TemplateBinding AllowedRoles}" Visibility="{Binding Converter={StaticResource RolesConverter}}">

                        <Border x:Name="border" BorderThickness="1">
                            <Border.BorderBrush>
                                <SolidColorBrush x:Name="borderBrush" Opacity="0" Color="Blue"/>
                            </Border.BorderBrush>
                            <ContentPresenter x:Name="VBContent"
                                              ContentTemplate="{TemplateBinding ContentTemplate}" 
                                              >

                            </ContentPresenter>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <mt:VerticalButtonCollection x:Key="TestCollection">
        <mt:VerticalButton AllowedRoles="Test1" 
                           Style="{StaticResource VerticalButton1Style}" 
                           Click="VerticalButton_Click"
                           >
            <TextBlock Text="Test Button"></TextBlock>
        </mt:VerticalButton>
        <mt:VerticalButton AllowedRoles="Test1" 
                           Style="{StaticResource VerticalButton1Style}" Click="VerticalButton_Click_1">
            <Ellipse Width="50" Height="50" Fill="Blue"></Ellipse>
        </mt:VerticalButton>
    </mt:VerticalButtonCollection>

    <Style x:Key="ListItemStyle" TargetType="ListBoxItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel x:Name="Root" Orientation="Horizontal">
                        <ContentPresenter Margin="5,5,5,5"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="ListStyle" TargetType="ListBox">
        <Setter Property="ItemContainerStyle" Value="{StaticResource ListItemStyle}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBox">
                    <Grid x:Name="Root">
                        <ItemsPresenter></ItemsPresenter>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
    <ListBox Style="{StaticResource ListStyle}" ItemsSource="{StaticResource TestCollection}" />
</Grid>

    Public Class VerticalButton
    Inherits Button
    Implements INotifyPropertyChanged

    Public Property AllowedRoles() As String
        Get
            Return CStr(GetValue(AllowedRolesProperty))
        End Get
        Set(ByVal value As String)
            SetValue(AllowedRolesProperty, value)
        End Set
    End Property

    Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register("AllowedRoles", GetType(String), GetType(VerticalButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnAllowedRolesChanged)))

    Public Shared Sub OnAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs)
        Dim sender As VerticalButton = CType(d, VerticalButton)
        sender.AllowedRoles = CStr(args.NewValue)
    End Sub

    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class

Public Class VerticalButtonCollection
    Inherits ObservableCollection(Of VerticalButton)

End Class
Cevap 12/12/2008 saat 16:12
kaynak kullanıcı

oy
0

Bu bizim yapmaya çalıştığımız şeyin küçük bir örneğidir. Ben (Sonra "VerticalButton" içeriğini almak ve gayet gösterilecek, ancak nihai amacın bu özelliğe öğenin görünürlüğünü bağlamak çünkü şablonda "AllowedRoles" bağımlılık tesiste elde edebilmek gerekiyor olabilir ) bir IValueConverter oluşturma. Biz sadece listbox en ItemTemplate gelen AllowedRoles şablonuna nasıl etrafında başımızı sarmak gibi olamaz.

İşte Page.xaml var:

<UserControl x:Class="AnnexAMapTool.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mt="clr-namespace:AnnexAMapTool;assembly=AnnexAMapTool"
    Width="400" Height="300">
    <UserControl.Resources>

        <mt:VerticalButtonCollection x:Key="TestCollection">
            <mt:VerticalButton AllowedRoles="Test1, Test2" Content="VBContent"></mt:VerticalButton>
        </mt:VerticalButtonCollection>

        <Style x:Key="ListItemStyle" TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <StackPanel x:Name="Root" Orientation="Horizontal">
                            <TextBlock Foreground="Red" Text="{Binding AllowedRoles}"></TextBlock>
                            <Ellipse Width="20" Height="20" Fill="Blue"></Ellipse>
                            <ContentPresenter Content="{TemplateBinding Content}" Margin="5,5,5,5"/>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="ListStyle" TargetType="ListBox">
            <Setter Property="ItemContainerStyle" Value="{StaticResource ListItemStyle}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <Grid x:Name="Root">
                            <ItemsPresenter></ItemsPresenter>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">
        <ListBox Style="{StaticResource ListStyle}" ItemsSource="{StaticResource TestCollection}" />
    </Grid>
</UserControl>

İşte Sınıf kod. Oldukça basit .. ButtonBase türetilmiştir ve DP tanımlanan birine sahiptir. Ayrıca altta toplama sınıfını not edin.

Imports System.Windows.Controls.Primitives
Imports System.Collections.ObjectModel

Public Class VerticalButton
    Inherits ButtonBase

    Public Property AllowedRoles() As String
        Get
            Return GetValue(AllowedRolesProperty)
        End Get
        Set(ByVal value As String)
            SetValue(AllowedRolesProperty, value)
        End Set
    End Property

    Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register("AllowedRoles", GetType(String), GetType(VerticalButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnAllowedRolesChanged)))

    Public Shared Sub OnAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs)
        Dim sender As VerticalButton = CType(d, VerticalButton)
        sender.AllowedRoles = CStr(args.NewValue)
    End Sub

End Class

Public Class VerticalButtonCollection
    Inherits ObservableCollection(Of VerticalButton)

End Class
Cevap 10/12/2008 saat 21:56
kaynak kullanıcı

oy
0
<MenuButton:VerticalButton AllowedRoles="test, test2"> 

allowedroles değer atanır; yukarıdaki hattıdır. Ben bu noktada bir düğme yeni bir örneğini yaratıyorum.

Nerede textblock muhtemelen tamamen yanlış izin rolleri bağlamak çalışıyorum, ama buna listbox en datatemplate içinde yapılıyor olsa bile çalışmaz.

<DataTemplate x:Key="VerticalMenuItemTemplate">
            <Canvas>
            <TextBlock Text="{Binding AllowedRoles}">
            </TextBlock>
            <Rectangle Height="500" Width="500" Fill="Blue"></Rectangle></Canvas>
        </DataTemplate>

Eğer bu küçük pasajımızdaki görebileceğiniz gibi Aslında, ben tuval ile birlikte bir rect kurulum var. Ben test amaçlı sadece oldu rect, görmüyorum, bu yüzden benim şablon gözardı ediliyor neredeyse gibi. Ben folows olarak ayarlanmış liste kutusu var

<ListBox x:Name="VerticalContainer" Width="81" Height="Auto" HorizontalAlignment="Center" DataContext="{Binding Mode=OneWay, Source={StaticResource VerticalButtonCollectionDS}}" Padding="0,0,0,0" Canvas.Top="-14" ItemTemplate="{StaticResource VerticalMenuItemTemplate}">
Cevap 10/12/2008 saat 14:58
kaynak kullanıcı

oy
0

Eğer Cilt sözdizimi kullandığınızda nesnenin DataContext bağlanma ediyoruz. Yani senin bağlayıcı:

<MenuButton:VerticalButton AllowedRoles="test, test2"> 
  <TextBlock Text="{Binding AllowedRoles}"></TextBlock>
</MenuButton:VerticalButton>

Temelde benim DataContext bana mülkiyet "AllowedRoles" olsun diyor. veri bağlam muhtemelen boş olduğu için, metin bloğunda herhangi bir değer almıyorsanız (Bu set görmedik).

Ne muhtemelen yapmak istediğiniz MenuButton için bir şablon tanımlamak ve sonra Şablon size söyleyebiliriz:

<TextBlock Text="{TemplateBinding AllowedRoles}"></TextBlock>

Hangi öğeye şablonu uyguladığınızda set alacak.

İşte şablonlar ve generic.xaml anlamaya başka bir thread yayınlanmıştır bazı bağlantılar:

  • Kontrol Özelleştirme
  • Arayüzlenebilir Özel Denetimler
  • Tweaking Standart Stiller
  • generic.xaml üzerinde 3 iyi bağlantılar

İyi şanslar!

Cevap 09/12/2008 saat 23:46
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more