Binding na content v user contentcontrolu   zodpovězená otázka

WPF

Dobrý den,

Pokud umístím do nějakého ContentControlu (v příkladu Button) ovládací prvek př. TextBlock a jeho hodnotu Text nabinduji na např. slider, tak se binding chová jak má.

    <StackPanel>
        <Button HorizontalContentAlignment="Stretch">
            <TextBlock HorizontalAlignment="Stretch" Text="{Binding Value, ElementName=Sld}" />
        </Button>
        <Slider x:Name="Sld" />
    </StackPanel>

Já potřebuji vytvořit vlastní control s contentem.

Dědím ho tedy od ContentControl a přepisuji mu style podle mé potřeby.

Přidávám ContentPresenter pro zobrazení obsahu.

<!-- Rectangle Frame -->
    <Style TargetType="{x:Type ....}" >

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ...}">

                    <Grid x:Name="MainGrid" 
                          Width="{TemplateBinding Width}"
                          Height="{TemplateBinding Height}"
                          ClipToBounds="True">
    
                        <!-- nějaké kreslení -->                        

                        <!-- Content -->
                        <ContentPresenter VerticalAlignment="Center"
                                          HorizontalAlignment="Center" 
                                          Content="{TemplateBinding Content}" />

                    </Grid>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Jenže mi nefunguje binding na prvky vložené v contentu mého contentcontrolu.

Nevěděl by někdo co je špatně ?

Ps.:

Nelze mi ani nastavit název x:Name controlu v mém user contentcontrolu.

Error 1 Cannot set Name attribute value 'Xxxx' on element 'TextBlock'. 'TextBlock' is under the scope of element 'UserContentControlTest', which already had a name registered when it was defined in another scope. Line 9 Position 94.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkusil jsem si udělat sample přesně podle kódů, který zde uvádíte, a ten mi funguje.

Nahrál jsem ho na http://www.h2net.cz/downloads/Samples/Wp...,

zkuste se podívat zda to řešíte stejně, případně kde máte rozdíl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Neuvěřitelné, sám bych na to 100%ně nepřišel.

Váš "TestContentControl" má v kódu pouze statický konstruktor s vyvoláním stylu. To jsem měl také.

Ale, já měl navíc (tak jak mi to VS vygenerovalo) ještě veřejný konstruktor s voláním metody InitializeComponent(). Pokud tento konstruktor odstaním tak to funguje jak má.

Stále mi tam nechce jít x:Name=xxx. VS mi po buildu vyhodí chybu:

Cannot set Name attribute value 'xxxx' on element 'TextBlock'. 'TextBlock' is under the scope of element 'RectangleFrame', which already had a name registered when it was defined in another scope.

U Vašeho kódu to lze. Takže to bude chtít jen lépe hledat.

Pane Holan, Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už jsem přišel i na druhý problém.

Pokud vytvořím ve VS control, tak jak jsem zvyklý, to je: pravé tlačítko a Add, UserControl.

Tak se zaprvé vygeneruje veřejný konstruktor a za druhé nelze prvkům v jeho contentu přiřazovat x:Name.

Vytvořím li control tak jak jste to dělal vy:

Přidáním třídy, bez xaml části tak funguje vše jak má.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback