Keskustelut - Visual Basic / C# / .NET - WPF Textbox kohdistimen väri


editoitu: 16:36 5.2.10
Torak 16:14 5.2.10 
Haluaa vaihtaa tekstilaatikon kohdistimen väriä ohjelmallisesti. Käytössä on siis UserControl jossa on tekstilaatikko, tekstilaatikko voi olla väritetty eri väreillä ja tällä hetkellä kohdistin on aina musta. Tämä ei sovi hyvin tummien väri yhdistelmien kanssa.

Törmäsin sivuun: http://msdn.microsoft.com/en-us/library/bb613567.aspx

Kokeilin vaihtaa controlin tyyliä yllä olevan esimerkin mukaisesti. Mutta eihän se mihinkään vaihtunut.

XML
    <Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBoxBase}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>           
            <Setter Property="MinWidth" Value="120"/>
            <Setter Property="MinHeight" Value="20"/>
            <Setter Property="AllowDrop" Value="true"/>
            <Setter Property="FocusVisualStyle"
                Value="{StaticResource FocusColor}"/>

            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBoxBase}">
                  .... määrittelyt jatkuu..

       <Style x:Key="FocusColor">
            <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Border>
                            <Rectangle Margin="1"                               
                               StrokeThickness="1"
                               Stroke="Green"
                               StrokeDashArray="1 2"
                               SnapsToDevicePixels="true"/>

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


Sitten ajattelin että on pakko olla jokin helpompikin ohjelmallinen tapa. Kokeilin tällästä:

C#
            var focusedElement = FocusManager.GetFocusedElement(TextBox) as Control;
            if (focusedElement != null)
                focusedElement.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0));
 


Mutta GetFocuselement palauttaa aina null:in.
Torak 16:52 5.2.10 
Päivitys: Löysin M$ esimerkin joka ei pelitä. http://msdn.microsoft.com/en-us/library/ms771588.aspx
Konvertoin homman WPF:ksi ja lisäsin textboxsin ja eikä pelitä vieläkään.
weicco 15:01 7.2.10 
Torak 16:45 7.2.10 
Hehei.... sehän toimii..
Torak 17:02 7.2.10 
Elikkä homma yksinkertaistettuna:

TextBox:n kursorin väri on kääntäen verrannollinen TextBoxin taustan väriin. Olin määritellyt textboxsin taustan värin tyhjäksi ja värjännyt kokonaisuuden grid avulla.
Ongelmana oli että viestilaatikon kursorin väri oli aina musta. Inhottavasta visuaalisesta bugista pääsee eroon kun päivittää TextBox:in taustan myös samaan väriin mitä
grid käyttää. Homma toimii sitten itsestään, eikä mitään visuaalisia tyyli kikkailuja tarvita.